如何在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,菜单
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
SpringSecurity报错authenticationManager must be spec的解决
2021-07-27 21:52:27
![](https://img.aspxhome.com/file/2023/4/60814_0s.png)
C#开发Winform程序调用存储过程
2023-01-11 05:23:15
![](https://img.aspxhome.com/file/2023/8/96298_0s.png)
Unity实现俄罗斯方块(二)
2022-01-15 06:57:56
![](https://img.aspxhome.com/file/2023/0/69780_0s.jpg)
android自定义控件实现简易时间轴(1)
2022-09-24 00:42:23
![](https://img.aspxhome.com/file/2023/0/139390_0s.gif)
android图像绘制(一)多种方法做图像镜像
2023-08-23 01:34:18
java如何从不规则的字符串中截取出日期
2022-05-28 02:33:58
![](https://img.aspxhome.com/file/2023/7/85547_0s.png)
java使用RandomAccessFile类基于指针读写文件实例代码
2021-07-29 17:45:45
C语言经典指针笔试题详解
2021-10-23 12:56:39
![](https://img.aspxhome.com/file/2023/3/127493_0s.png)
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
![](https://img.aspxhome.com/file/2023/8/85738_0s.png)
SpringBoot微信消息接口配置详解
2023-08-23 09:51:21
![](https://img.aspxhome.com/file/2023/2/58422_0s.jpg)
DevExpress实现GridControl根据列选中一行
2021-08-16 05:23:19
Android使用系统相机进行拍照的步骤
2023-10-07 16:05:05
C#实现的简单随机数产生器功能示例
2023-06-05 12:57:54
![](https://img.aspxhome.com/file/2023/8/92858_0s.jpg)
详解xamarin Android 实现ListView万能适配器
2022-11-26 02:12:33
Android提高之TelephonyManager功能探秘
2021-06-11 01:19:12
![](https://img.aspxhome.com/file/2023/6/110766_0s.gif)
spring @schedule注解如何动态配置时间间隔
2023-07-29 03:51:14
Java泛型的使用限制实例分析
2023-05-07 20:14:52
Android实现点击缩略图放大效果
2022-11-10 21:47:23