本实例主要介绍了android中的一些菜单,Android系统里面有3种类型的菜单:options menu,context menu,sub menu。
在本例中介绍了options menu,context menu。
例子中使用的图片采用了android中自带的一些图片
menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:title="File" android:icon="@drawable/icon"> <menu> <group android:id="@+id/group1" android:checkableBehavior="none"> <item android:id="@+id/newFile" android:alphabeticShortcut="n"></item> <item android:id="@+id/openFile" android:alphabeticShortcut="o"></item> <item android:id="@+id/saveFile" android:alphabeticShortcut="s"></item> </group> </menu> </item> <item android:title="Edit" android:icon="@drawable/icon"> <menu> <group android:id="@+id/group2" android:checkableBehavior="single"> <item android:id="@+id/cut" android:title="Cut"></item> <item android:id="@+id/copy" android:title="Copy"></item> <item android:id="@+id/past" android:title="Past"></item> </group> </menu> </item> <item android:title="Help" android:icon="@drawable/icon"> <menu> <group android:id="@+id/group3" android:checkableBehavior="all"> <item android:id="@+id/about" android:title="About"></item> <item android:id="@+id/exit" android:title="Exit"></item> </group> </menu> </item> </menu>
TestMenuAcvity .java
public class TestMenuAcvity extends Activity{ public static final int ITEM1 = Menu.FIRST; public static final int ITEM2 = Menu.FIRST + 1; public static final int ITEM3 = Menu.FIRST + 2; private TextView textView; private MenuInflater menu; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.testmenu); menu = new MenuInflater(this); textView = (TextView) findViewById(R.id.mymenu); registerForContextMenu(textView); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { menu.add(0, ITEM1, 0, "红色背景"); menu.add(0, ITEM2, 0, "绿色背景"); menu.add(0, ITEM3, 0, "白色背景"); } @Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case ITEM1: textView.setBackgroundColor(Color.RED); break; case ITEM2: textView.setBackgroundColor(Color.GREEN); break; case ITEM3: textView.setBackgroundColor(Color.WHITE); break; default: break; } return true; } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenu().inflate(R.menu.menu, menu); SubMenu file = menu.addSubMenu("文件"); SubMenu edit = menu.addSubMenu("编辑"); file.add(0, ITEM1, 0, "新建"); file.add(0, ITEM2, 0, "修改"); file.add(0, ITEM3, 0, "删除"); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.about: aboutAlert("本实例是研究如何使用XML菜单资源来定义菜单!"); break; case R.id.exit: exitAlert("您确定要退出吗?"); break; case ITEM1: setTitle("新建文件"); break; case ITEM2: setTitle("修改文件"); break; case ITEM3: setTitle("删除文件"); Toast toast = Toast.makeText(getApplicationContext(), "提示信息:\n文件删除成功!", 2); toast.show(); break; default: break; } return true; } private void exitAlert(String msg){ AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(msg).setCancelable(false).setPositiveButton("确定", new DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { //结束Activity finish(); } }).setNegativeButton("取消", new DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { return; } }); AlertDialog dialog = builder.create(); dialog.show(); } private void aboutAlert(String msg){ AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(msg).setCancelable(false).setPositiveButton("确定", new DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { } }); AlertDialog dialog = builder.create(); dialog.show(); } public MenuInflater getMenu() { return menu; } public void setMenu(MenuInflater menu) { this.menu = menu; } }
运行结果截图:
options menu:
context menu:长按“测试菜单资源”即可显示下图,选择对应的选项“测试菜单资源”的背景色就会变成对应的颜色