Menu中添加子Menu有两种方法,一种就是直接在xml文件中添加,在<item>标签里面再添加<Menu>标签.另一种就是在代码中进行动态编写.
以下代码是在上一篇博客中进行修改的,连接地址:http://www.cnblogs.com/hanyuan/archive/2012/04/09/Andorid%E4%B8%AD%E7%9A%84Menu.html
其中Options Menu中的子Menu是在xml文件中进行添加的,而Context Menu中的子Menu是在代码中进行添加的,其实两种都可以,只是为了方便说明,省点时间而已。
mymenu.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/about" android:icon="@drawable/about" android:title="关于"> <menu> <group android:checkableBehavior="single" > <item android:id="@+id/factory" android:title="商家"/> <item android:id="@+id/price" android:title="价格"/> </group> </menu> </item> <item android:id="@+id/exit" android:icon="@drawable/exit" android:title="退出"/> </menu>
其中group中的android:checkableBehavior属性可以是sigle,all或者none.如果是single,那个在这个group里面的所有Item里只能选择一个,如果是all则任意选择,如果是none则不能进行选择。
在代码中添加子Menu:
@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.contextmenu, menu); menu.addSubMenu("指导老师").add("李青龙"); }
addSubMenu()方法返回的是SubMenu对象,可以进行子菜单的添加,这里直接采用链式编写。
Android中group中的Item默认情况下选择的时候是不会发生变化的。如果要发生状态的改变,要在onOptionsMenuItemSelected()方法中进行控制,代码如下:
@Override public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); switch (itemId) { case R.id.about: Toast.makeText(this, "这是个OptionsMenu测试", Toast.LENGTH_LONG).show(); return true; case R.id.exit: finish(); return true; case R.id.factory: if(!item.isChecked()) item.setChecked(true); case R.id.price: if(!item.isChecked()) item.setChecked(true); } return super.onOptionsItemSelected(item); }
程序运行结果:
Context Menu: 点击指导老师进入子菜单:
可进行选择的子Menu菜单 点击关于后进入菜单