package com.google.mcommerce.sample.android.chapter04.menu; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.SubMenu; import android.view.View; import android.widget.TextView; import com.google.mcommerce.sample.android.R; public class SampleMenusActivity extends Activity { // Initialize this in onCreateOptions Menu myMenu = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // TextView tv = new TextView(this); // tv.setText("Hello, Android. Say hello"); // setContentView(tv); setContentView(R.layout.c04_menu_main); // Before calling this method make sure // set the content view registerForContextMenu(this.getTextView()); } @Override public boolean onCreateOptionsMenu(Menu menu) { // call the parent to attach any system level menus super.onCreateOptionsMenu(menu); this.myMenu = menu; // add a few normal menus addRegularMenuItems(menu); // add a few secondary menus add5SecondaryMenuItems(menu); this.addSubMenu(menu); // it must return true to show the menu // if it is false menu won't show return true; } private void addRegularMenuItems(Menu menu) { // Secondary items are shown just like everything else int base = Menu.FIRST; // value is 1 MenuItem item1 = menu.add(base, base, base, "append"); menu.add(base, base + 1, base + 1, "XML Menus"); menu.add(base, base + 2, base + 2, "clear"); menu.add(base, base + 3, base + 3, "hide secondary"); menu.add(base, base + 4, base + 4, "show secondary"); menu.add(base, base + 5, base + 5, "enable secondary"); menu.add(base, base + 6, base + 6, "disable secondary"); menu.add(base, base + 7, base + 7, "check secondary"); MenuItem item8 = menu .add(base, base + 8, base + 8, "uncheck secondary"); // This will show the icon // It might obscure the text item1.setIcon(R.drawable.balloons); // But this does not item8.setIcon(R.drawable.balloons); } private void add5SecondaryMenuItems(Menu menu) { // Secondary items are shown just like everything else int base = Menu.CATEGORY_SECONDARY; menu.add(base, base + 1, base + 1, "sec. item 1"); menu.add(base, base + 2, base + 2, "sec. item 2"); menu.add(base, base + 3, base + 3, "sec. item 3"); menu.add(base, base + 3, base + 3, "sec. item 4"); menu.add(base, base + 4, base + 4, "sec. item 5"); } private void addSubMenu(Menu menu) { // Secondary items are shown just like everything else int base = Menu.FIRST + 100; SubMenu sm = menu.addSubMenu(base, base + 1, Menu.NONE, "submenu"); MenuItem item1 = sm.add(base, base + 2, base + 2, "sub item1"); sm.add(base, base + 3, base + 3, "sub item2"); sm.add(base, base + 4, base + 4, "sub item3"); // work the icons // submenu item icons are not supported item1.setIcon(R.drawable.icon48x48_2); // the following is ok sm.setIcon(R.drawable.icon48x48_1); // This will result in an exception // sm.addSubMenu("try this"); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == 1) { appendText("\nhello"); } else if (item.getItemId() == 2) { this.appendMenuItemText(item); Intent intent = new Intent(this, XMLMenusActivity.class); this.startActivity(intent); } else if (item.getItemId() == 3) { emptyText(); } else if (item.getItemId() == 4) { // hide secondary this.appendMenuItemText(item); this.myMenu.setGroupVisible(Menu.CATEGORY_SECONDARY, false); } else if (item.getItemId() == 5) { // show secondary this.appendMenuItemText(item); this.myMenu.setGroupVisible(Menu.CATEGORY_SECONDARY, true); } else if (item.getItemId() == 6) { // enable secondary this.appendMenuItemText(item); this.myMenu.setGroupEnabled(Menu.CATEGORY_SECONDARY, true); } else if (item.getItemId() == 7) { // disable secondary this.appendMenuItemText(item); this.myMenu.setGroupEnabled(Menu.CATEGORY_SECONDARY, false); } else if (item.getItemId() == 8) { // check secondary this.appendMenuItemText(item); this.myMenu.setGroupCheckable(Menu.CATEGORY_SECONDARY, true, false); } else if (item.getItemId() == 9) { // uncheck secondary this.appendMenuItemText(item); this.myMenu .setGroupCheckable(Menu.CATEGORY_SECONDARY, false, false); } else { this.appendMenuItemText(item); } // should return true if the menu item // is handled return true; // If it is not our menu item // let the base class handle it // return super.onOptionsItemSelected(item); } // Context menu support @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { menu.setHeaderTitle("Sample menu"); menu.add(200, 200, 200, "item1"); } @Override public boolean onContextItemSelected(MenuItem item) { this.appendMenuItemText(item); // menu item has been handled return true; } // This method is here to demonstrate loading xml menu // You can call this method from the oncreateoptions menu // if you want to use the xml menu instead of programmatically // creating the menus. private void loadXMLMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); // from activity inflater.inflate(R.menu.c04_my_menu, menu); } private TextView getTextView() { TextView tv = (TextView) this.findViewById(R.id.textViewId); return tv; } public void appendText(String text) { TextView tv = (TextView) this.findViewById(R.id.textViewId); tv.setText(tv.getText() + text); } private void appendMenuItemText(MenuItem menuItem) { String title = menuItem.getTitle().toString(); TextView tv = (TextView) this.findViewById(R.id.textViewId); tv.setText(tv.getText() + "\n" + title + ":" + menuItem.getItemId()); } private void emptyText() { TextView tv = (TextView) this.findViewById(R.id.textViewId); tv.setText(""); } }// eof-class