如何在XML中定义菜单
和android ui layout一样,我们也可以在xml中定义应用程序的菜单。通过在菜单的oncreateoptionsmenu方法中膨胀菜单layout。这样做会使我们的程序代码简单多了,而且尽可能的将更多的界面设计部分放到xml,便于浏览。
1. 在工程的/res/文件夹下创建menu文件夹,用来保存你为应用程序定义的菜单xml文件。
在菜单xml layout中,有三个有效的元素:menu、group、item。item和group必须是menu的子元素,且item必须是group的子元素。另外的menu可以是item的子元素(为了创建子菜单)。下面的xml片段显示了菜单的层次定义:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:title="play" android:id="@+id/media_play" android:icon="@android:drawable/ic_media_play"/> <item android:title="pause" android:id="@+id/media_pause" android:icon="@android:drawable/ic_media_pause"/> <item android:title="file" android:id="@+id/file"> <menu> <item android:title="open..." android:id="@+id/file_open"/> <item android:title="save" android:id="@+id/file_save"/> <item android:title="save as" android:id="@+id/file_saveas"/> <item android:title="exit" android:id="@+id/file_exit"/> </menu> </item> <item android:title="edit" android:id="@+id/edit"> <menu> <group> <item android:title="copy" android:id="@+id/edit_copy"/> <item android:title="paste" android:id="@+id/edit_paste"/> <item android:title="cut" android:id="@+id/edit_cut"/> <item android:title="delete" android:id="@+id/edit_delete"/> </group> </menu> </item> </menu>
2. 重写activity的oncreateoptionsmenu方法,通过menuinflater.inflate方法来膨胀菜单xml。
menuinflater inflater = getmenuinflater();
inflater.inflate(r.menu.menu_option, menu);
3. 在activity的onoptionsitemselected方法中处理每个菜单项的点击事件:
@override public boolean onoptionsitemselected(menuitem item) { super.onoptionsitemselected(item); switch (item.getitemid()) { case r.id.media_play: break; case r.id.media_pause: break; case r.id.file_open: break; case r.id.file_save: … } return true; }
在xml可以定义菜单项的图标、快捷键、checkbox等更多特征,了解更多请查阅sdk中关于菜单的主题。
演示的效果如图:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Android listview动态加载列表项实现代码
下一篇: PHP中多线程的两个实现方法
推荐阅读
-
如何在XML中定义菜单
-
如何在Spring中自定义scope的方法示例
-
详解Android XML中引用自定义内部类view的四个why
-
详解Android XML中引用自定义内部类view的四个why
-
程序中通过define定义的常量如何在smarty模板中使用
-
如何在Spring中自定义scope的方法示例
-
Android中Dialog自定义上下文花式菜单
-
如何在TensorFlow2.X中使用自定义训练循环的情况下在TensorBoard中绘制网络结构图(计算图)
-
如何在factory_girl的define中定义has_many( & :through) association RubyF#Google
-
如何在factory_girl的define中定义has_many( & :through) association RubyF#Google