如何在XML中定义菜单
作者:xirihanlin 发布时间:2023-08-08 11:49:33
标签: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中关于菜单的主题。
演示的效果如图:


猜你喜欢
- 本文介绍了Flutter 通过Clipper实现各种自定义形状的示例代码,分享给大家,具体如下:ClipOval 圆形裁剪ClipOval(
- 1.MyBatis中map的应用1.1.应用场景假设,实体类,或者数据库中的表,字段或者参数过多,应当考虑使用Map!!!1.2.具体实现/
- 直接看代码,注释都写清楚了public class MainActivity extends Activity { private
- 约瑟夫环约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数
- FeignClient设置动态Url1. 需求描述一般情况下,微服务内部调用都是通过注册中心,eureka,zookeeper,nacos等
- 一、堆栈内存堆栈内存,顾名思义,指的是堆内存以及栈内存,其中,堆内存是由Java GC进行管理的内存区域,而栈内存则是线程内存。关于栈内存,
- 其实这个http下载器的功能已经相当完善了,支持:限速、post投递和上传、自定义http header、设置user agent、设置ra
- jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过
- 二叉树的分类(按存储结构)树的分类(按存储结构) &nbs
- 解决My eclipse 工程发布时端口占用问题如果运行后如图的错,需要进行如下操作来解决:a:打开cmd,输入netstat -ano 找
- 1、通过C#调用Java的方法:在C#中添加调用的一些代码,利用Unity提供的一些接口实现调用Java!private const str
- 在实践中,项目的某些配置信息是需要进行加密处理的,以减少敏感信息泄露的风险。比如,在使用Druid时,就可以基于它提供的公私钥加密方式对数据
- Hibernate是一个彻底的ORM(Object Relational Mapping,对象关系映射)开源框架。我们先看一下官方文档所给出
- 本文实例为大家分享了Java简单实现定时器的具体代码,供大家参考,具体内容如下一、定时器定时器相当于一个任务管理器。有些任务可能现在执行,
- 简介Quartz是一款功能强大的任务调度器,可以实现较为复杂的调度功能,如每月一号执行、每天凌晨执行、每周五执行等等,还支持分布式调度。本文
- 一.协程间的通信当需要进行协程间的通信时,可以调用Channel方法,创建一个Channel接口指向的对象,通过调用该对象的send方法和r
- 目的上周新一期的最强大脑出来了,虽然上季被称为最强黑幕,不过呢。我决定还是看看= =。它里面第一关是叫做数字华容道。说白了,就是和拼图差不多
- 刚开始项目,需要用到mybatis分页,网上看了很多插件,其实实现原理基本都大同小异,但是大部分都只给了代码,注释不全,所以参考了很多篇文章
- 自动去除图像扫描黑边/// <summary>  
- package com.robin;import java.io.File;import java.io.FileInputStream;i