Menu详解(二):利用XML生成菜单和子菜单
前言:上篇,我们说了有关代码生成菜单和子菜单的方法,这里我们再讲讲有关利用XML生成菜单和子菜单的问题。 业精于勤,荒于嬉,行成于思,毁于随 (日拱一卒) 系列文章: 1、《Menu详解(一):代码实现系统菜单及子菜单》 2、《Menu详解(二):利用XML生成菜单和子菜单》 3、《Menu详解(三):使用上下文菜单》 一、XML布局在我们新建工程时,系统会自己为我们生成一个menu文件,在menu文件夹下,名字叫:main.xml; 打开可以看到,里面空空如也,现在我们就加上几项: <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context="com.example.testmenu_xml.MainActivity" > <group android:id="@+id/menuGroup_main"> <item android:id="@+id/menuItem_1" android:icon="@drawable/ic_launcher" android:title="menu_1"/> <item android:id="@+id/menuItem_2" android:icon="@drawable/ic_launcher" android:title="menu_2"/> <item android:id="@+id/menuItem_3" android:icon="@drawable/ic_launcher" android:title="menu_3"/> </group> </menu>可以看到完整的Menu布局层次应该是:menu -> group -> item group标签:对应每一篇中组的概念,id表示组的id值,对应于menu.add(groupId_1,1,"menu1_1")的第一个参数; 每个标记都有很多的属性,各属性含义如下: <group>标签:
<item>标签:
二、使用与响应XML布局做好了,下一步就是在代码中使用这个布局了。@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. MenuInflater menuInflater=getMenuInflater(); menuInflater.inflate(R.menu.main,menu); return true; }使用MenuInflater将main.xml菜单文件与menu绑定起来; 下一步是响应菜单项点击,同样,可以在onOptionsItemSelected()通过Id过滤: @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); //通过ID来响应菜单项 if (id == R.id.menuItem_1) { Toast.makeText(MainActivity.this,"menu_1",Toast.LENGTH_SHORT).show(); return true; } return super.onOptionsItemSelected(item); }同样,是通过Item的Id值来判定当前点击的是哪一个菜单项,只是这里匹配的不再是数字,而是R.id.XXX;这里我只对第一个Menu做了响应,当点击时Toast出它的Title,其它没做处理; 上面的用例的效果图如下: (4.0以上出不来Icon ?答案在这篇文章第四节的第三部分(存在问题) :《Menu详解(一):代码实现系统菜单及子菜单》) 三、使用子菜单下面我直接在Item3中添加一个子菜单,给大家看下代码先: <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context="com.example.testmenu_xml.MainActivity" > <group android:id="@+id/menuGroup_main"> <item android:id="@+id/menuItem_1" android:icon="@drawable/ic_launcher" android:title="menu_1"/> <item android:id="@+id/menuItem_2" android:icon="@drawable/ic_launcher" android:title="menu_2"/> <item android:id="@+id/menuItem_3" android:icon="@drawable/ic_launcher" android:title="menu_3"> <menu > <group android:id="@+id/group_2"> <item android:id="@+id/sub_1" android:title="sub_1"/> <item android:id="@+id/sub_2" android:title="sub_2"/> <item android:id="@+id/sub_3" android:title="sub_3"/> </group> </menu> </item> </group> </menu>其实就是在Item3中添加下面代码: <menu > <group android:id="@+id/group_2"> <item android:id="@+id/sub_1" android:title="sub_1"/> <item android:id="@+id/sub_2" android:title="sub_2"/> <item android:id="@+id/sub_3" android:title="sub_3"/> </group> </menu>可见子菜单也是一个菜单,也包含菜单中的所有部分,menu->group->item,只不过被嵌套在Item里面而已了。添加子菜单后,点击Item3 就会跳进子菜单了,如图: Ok啦,这篇文章比较短,内容也比较少,下篇给大家说说上下文菜单; 源码下载地址:http://download.csdn.net/detail/harvic880925/7788711 请大家尊重原创者版权,转载请标明出处:http://www.52php.cn/article/p-ahokxnlu-bae.html 谢谢! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |