如何在XML中定义菜单

作者:xirihanlin 时间:2023-08-08 11:49:33 

和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中关于菜单的主题。
 演示的效果如图:

如何在XML中定义菜单

标签:XML,菜单
0
投稿

猜你喜欢

  • SpringSecurity报错authenticationManager must be spec的解决

    2021-07-27 21:52:27
  • C#开发Winform程序调用存储过程

    2023-01-11 05:23:15
  • Unity实现俄罗斯方块(二)

    2022-01-15 06:57:56
  • android自定义控件实现简易时间轴(1)

    2022-09-24 00:42:23
  • android图像绘制(一)多种方法做图像镜像

    2023-08-23 01:34:18
  • java如何从不规则的字符串中截取出日期

    2022-05-28 02:33:58
  • java使用RandomAccessFile类基于指针读写文件实例代码

    2021-07-29 17:45:45
  • C语言经典指针笔试题详解

    2021-10-23 12:56:39
  • Java8如何从一个Stream中过滤null值

    2022-02-03 08:10:20
  • java实现excel和txt文件互转

    2023-10-07 23:04:05
  • C# 使用SharpZipLib生成压缩包的实例代码

    2021-08-29 20:32:57
  • SpringBoot微信消息接口配置详解

    2023-08-23 09:51:21
  • DevExpress实现GridControl根据列选中一行

    2021-08-16 05:23:19
  • Android使用系统相机进行拍照的步骤

    2023-10-07 16:05:05
  • C#实现的简单随机数产生器功能示例

    2023-06-05 12:57:54
  • 详解xamarin Android 实现ListView万能适配器

    2022-11-26 02:12:33
  • Android提高之TelephonyManager功能探秘

    2021-06-11 01:19:12
  • spring @schedule注解如何动态配置时间间隔

    2023-07-29 03:51:14
  • Java泛型的使用限制实例分析

    2023-05-07 20:14:52
  • Android实现点击缩略图放大效果

    2022-11-10 21:47:23
  • asp之家 软件编程 m.aspxhome.com