当前位置: 首页 > news >正文

Android菜单Menu详解

菜单资源文件通常放置在res\menu目录下,在创建项目时,默认不自动创建menu目录,所以需手动创建。
Android Resource Directory→ value menu
或在创建根元素<menu></menu>标记的xml文件对自动气建眼
res→Android Resounce File →Resource type→menu
子元素<item></iten><group></group>

<item>liter>标记常用属性,描述:

andraid: id  设置ID,也就是唯一标识。
android: title  设置标题。
android: alphabeticShortcut  指定字符快捷键。
android: numericShortcut  指定数字快捷键。
android: enabled  是否可用。
android: checkable  是否可选。
android: visible  是否可见。
android: checked  是否已选用。
android: icon  指定图标,需重写onMenuOpened方法并在其中调用设置显示图标才会在列表项中显示图标(重写方法)。
app: showAsAction  该属性用于溢出菜单控制菜单项在导航栏上展示位置。值可为:

always  总是在导航栏上显示菜单图标。
ifRoom  如果导航栏右侧有空间,该项就直接显示在导航栏上,不再放入溢出菜单。
never  从不在导航栏上显示,一直放在溢出菜单列表中。
withText  如果能在导航栏上显示,除了显示图标还要显示该项的文字说明。
collapseActionView  操作视图要折叠为一个按钮,点击该按钮再展示操作视图主要用于Searchview

<group></group>标记常用属性,描述:

android: id  为菜单组设置ID。
android: checkableBehavior  指定菜单组选择行为,值可为none(不可选)、all(多选)、single(单选)。
android: menuCategory  对某单组进行分类,指定优先级,值可为containersystemsecondaryalternative
android: enable  指定该菜单组中全部 单项是否可用
android: visible  指定该菜单组中全部某单项是否可见

<item>标记中还可包含<menu>标记,用于显示子菜单。
<group>标记中可有多个<item>标记,用于组成菜单组。

//例
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"><item android:title="item1"android:icon="@drawable/zerotwo"app:showAsAction="always"/><item android:title="item2"><menu><item android:title="item2_1"/><item android:title="item2_2"/></menu></item><group><item android:title="item3"/><item android:title="item4"/></group></menu>

1. 上下文菜单

长按注册的控件显示菜单。

public class MainActivity extends AppCompatActivity {protected void onCreate(Bundle savedInstanceState) {... ...TextView textView=findViewById(R.id.textView);registerForContextMenu(textView);}public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {//用于创建菜单(上下文菜单)MenuInflater menuInflater=new MenuInflater(this);menuInflater.inflate(R.menu.test,menu);}public boolean onContextItemSelected(MenuItem item) {//用于选择菜单项(上下文菜单)int id=item.getItemId();if(id==R.id.~){~}return true;}}

2. 选项菜单

点击标题栏或工具栏最右侧三个点显示菜单

如果隐藏标题栏ActionBar且没有使用工具栏ToolBar(app:menu)将无法使用。

使用ToolBar时要使用 setSupportActionBar( toolBar ) 将工具栏设为操作栏。

public class MainActivity extends AppCompatActivity {public boolean onCreateOptionsMenu(Menu menu) {//用于创建菜单(选项菜单/溢出菜单)MenuInflater menuInflater=new MenuInflater(this);menuInflater.inflate(R.menu.test,menu);return true;}public boolean onOptionsItemSelected(MenuItem item) {//用于选择菜单项(选项菜单/溢出菜单)int id=item.getGroupId();if(id==R.id.~){~}return true;}}

3. 溢出菜单

溢出菜单和选项菜单并无较大差别,均是点击标题栏ActionBar或工具栏ToolBar最右侧三个点显示菜单
如果隐藏标题栏ActionBar且没有使用工具栏ToolBar(app:menu)将无法使用。

使用ToolBar时要使用 setSupportActionBar( toolBar ) 将工具栏设为操作栏。

菜单栏默认不在某单列表中显示图标;可制作自定义方法来使其显示图标。

//用于使菜单项在列表中显示图片的自定义方法
class MyMenuUtil{public static void setOverflowIconVisible(int featureId,Menu menu){//ActionBar的featureId是8,ToolBar的featureId是108if(featureId%100== Window.FEATURE_ACTION_BAR&&menu!=null){if(menu.getClass().getSimpleName().equals("MenuBuilder")){try {//setOptionalIconsVisible是隐藏方法,需要反射机制调用。Method m=menu.getClass().getDeclaredMethod("setOptionalIconsVisible",Boolean.TYPE);m.setAccessible(true);m.invoke(menu,true);}catch (Exception e){e.printStackTrace();}}}}
}
public class MainActivity extends AppCompatActivity {public boolean onMenuOpened(int featureId, Menu menu) {//打开菜单时调用//设置在菜单栏中显示图标MyMenuUtil.setOverflowIconVisible(featureId,menu);return super.onMenuOpened(featureId, menu);}public boolean onCreateOptionsMenu(Menu menu) {//用于创建菜单(溢出菜单/选项菜单)MenuInflater menuInflater=new MenuInflater(this);menuInflater.inflate(R.menu.test,menu);return true;}public boolean onOptionsItemSelected(MenuItem item) {//用于选择菜单项(溢出菜单/选项菜单)int itemId=item.getItemId();int groupId=item.getGroupId();if(itemId==R.id.~){~}return true;}
}

相关文章:

Android菜单Menu详解

菜单资源文件通常放置在res\menu目录下&#xff0c;在创建项目时&#xff0c;默认不自动创建menu目录&#xff0c;所以需手动创建。 Android Resource Directory→ value menu 或在创建根元素为<menu></menu>标记的xml文件对自动气建眼 res→Android Resounce File…...

win10 + cmake3.17 + vs2017编译osgearth2.7.0遇到的坑

坑1&#xff1a;debug模式下生成osgEarthAnnotation时 错误&#xff1a;xmemory0(881): error C2440: “初始化”: 无法从“std::pair<const _Kty,_Ty>”转换为 to _Objty 出错位置&#xff1a;src/osgEarthFeatures/FeatureSourceIndexNode.cpp 解决办法&#xff1a; …...

【Linux网络编程_TCP/UDP_字节序_套接字 实现: FTP 项目_局域网聊天项目 (已开源) 】.md updata:23/11/05

文章目录 TCP/UDP对比端口号作用字节序字节序转换api套接字 socket实现网络通讯服务端 逻辑思路demo&#xff1a; 满血版双方通讯/残血版多方通讯 &#xff08;配合进程实现&#xff09;服务端 demo客户端 demo FTP 项目实现sever demo:client demo: 局域网多方通讯 &#xff0…...

SpringBoot日志基础

1.yml 说明&#xff1a;配置yml文件。debug、info、warn、error。 logging:level:root: debug2.指定某个包 logging:level:root: info # 设置某个包的日志级别com.forever.controller: debug 3.分组调试 logging:# 设置分组group:ebank: com.forever.controlleriservic…...

linux文章导航栏

linux文章导航栏 问价解压缩大全Linux tar 备忘清单zip文件解压缩命令全 ubuntuubuntu18.04安装教程\搜狗输入法\网络配置教程Linux静态库和动态库 shellShell脚本命令...

Adobe:受益于人工智能,必被人工智能反噬

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结&#xff1a; &#xff08;1&#xff09;Adobe(ADBE)受益于生成式人工智能的兴起&#xff0c;其一直能实现两位数的收入增长就证明了这一点。 &#xff08;2&#xff09;在生成式人工智能兴起时&#xff0c;该公司就快…...

VScode配置 github 上传代码

初始化&#xff0c;设置用户名和密码 # 设置你的 Git 用户名 git config --global user.name author# 设置你的 Git 邮箱 git config --global user.email authorgmail.com# 确保 Git 输出带有颜色 git config --global color.ui auto​# 查看 Git 配置 git list1. 初始化本地…...

mysql根据条件导出表数据(`--where=“文本“`)

本文只讲导出&#xff0c;导入可以参考不同MySQL服务的表以及库的数据迁移&#xff08;/备份&#xff09;-CSDN博客 现在先查下migration_one.table_11里有什么&#xff1a; SELECT * FROM migration_one.table_11;id name ------ -------- 12321 hehe 1321 …...

MySQL复习总结(二):进阶篇(索引)

文章目录 一、存储引擎1.1 MySQL体系结构1.2 存储引擎介绍1.3 存储引擎特点1.4 存储引擎选择 二、索引2.1 基本介绍2.2 索引结构2.3 索引分类2.4 索引语法2.5 SQL性能分析2.6 索引使用2.6.1 最左前缀法则2.6.2 范围查询2.6.3 索引失效情况2.6.4 SQL提示2.6.5 覆盖索引2.6.6 前缀…...

java APP自动化测试AppIum

一、前言 二、Appium环境搭建 2.1 JDK安装 2.2 Android SDK安装配置 2.3 模拟器安装及配置 2.4 Appium Desktop安装及使用 2.5 Appium配置连接模拟器 三、实战基本脚本编写 3.1 创建Maven项目并配置 3.2 简单Demo 四、写在最后 一、前言 随着移动互联网的发展&#xff0c;AP…...

【洛谷 P1303】A*B Problem 题解(高精度+字符串)

A*B Problem 题目描述 给出两个非负整数&#xff0c;求它们的乘积。 输入格式 输入共两行&#xff0c;每行一个非负整数。 输出格式 输出一个非负整数表示乘积。 样例 #1 样例输入 #1 1 2样例输出 #1 2提示 每个非负整数不超过 1 0 2000 10^{2000} 102000。 思路 …...

计算机网络(43)

目录 计算机网络学习 1、OSI 七层网络模型&#xff0c;你了解吗&#xff1f;具体功能有哪些&#xff1f; 2、TCP/IP四层模型&#xff1f; 3、说一下TCP的三次握手&#xff1f; 4、为什么要三次握手&#xff1f;两次行不行&#xff1f;四次呢&#xff1f; 5、为什么建立连接是三…...

Ipswitch WS_FTP 12 安裝

Ipswitch WS.FTP.Professional.12.6.rar_免费高速下载|百度网盘-分享无限制 This works but quite difficult to figure out. It didnt allow me to replace the wsftpext.dll at 1st and had to test lots of ways how to replace it. This is how I did: 1. Follow the instr…...

二十三种设计模式全面解析-解密组合模式(Composite Pattern):构建统一而强大的对象结构

在软件开发中&#xff0c;面对复杂的对象结构和层次关系&#xff0c;我们常常需要一种能够统一处理单个对象和对象组合的设计模式。组合模式&#xff08;Composite Pattern&#xff09;提供了一种优雅而灵活的解决方案&#xff0c;它允许我们以统一的方式处理单个对象和对象组合…...

为什么路由器属于网络层

1. 路由器所属阶段 路由器属于 OSI 模型的网络层&#xff0c;因为它们负责根据网络层信息&#xff08;第 3 层&#xff09;做出路由决策。网络层是 OSI 模型中的第三层&#xff0c;主要负责将数据包从网络中的源路由到目的地。 Here’s a formal and precise explanation of …...

【0基础学Java第七课】-- 类和对象01

7. 类和对象 7.1 面向对象的初步认知7.1.1 什么是面向对象7.1.2 面向对象与面向过程 7.2 类定义和使用7.2.1 简单认识类7.2.2 类的定义格式7.2.3 定义一个狗类7.2.4 定义一个学生类 7.3 类的实例化7.3.1 什么是实列化7.3.2 引用只能指向对象&#xff0c;且不能同时指向多个对象…...

一个JS版寻路的实现

js版的寻路的测试 20231104_161146 path get_v8: function (x_inc, y_inc) {if (x_inc 0) {if (y_inc < 0) {return [[0, -1], [-1, -1], [1, -1], [-1, 0], [1, 0], [-1, 1], [1, 1], [0, 1]];} else if (y_inc > 0) {return [[0, 1], [-1, 1], [1, 1], [-1, 0], [1, 0…...

Java web应用的目录结构

详情可以参考&#xff1a; https://tomcat.apache.org/tomcat-10.1-doc/appdev/deployment.html https://jakarta.ee/specifications/servlet/6.0/jakarta-servlet-spec-6.0.html#directory-structure Java web应用根目录下包含如下内容&#xff1a; *.html, *.jsp等&#xf…...

【Mac环境搭建】JDK安装、多JDK安装与切换

文章目录 JDK下载与安装下载安装 配置环境变量安装多个JDK共存 JDK下载与安装 下载 Oracle官网提供了非常多个版本的JDK供下载&#xff0c;可以点击如下链接重定向到JDK下载页面 ORACLE官网JDK下载 安装 下面的官方文档可以点开收藏到浏览器的收藏夹&#xff0c;这样后续在开…...

C++: 类和对象(中)

文章目录 1. 类的6个默认成员函数2. 构造函数构造函数概念构造函数特性特性1,2,3,4特性5特性6特性7 3. 析构函数析构函数概念析构函数特性特性1,2,3,4特性5特性6 4. 拷贝构造函数拷贝构造函数概念拷贝构造函数特性特性1,2特性3特性4特性5 5. 运算符重载一般运算符重载赋值运算符…...

Unity-MCP协议:可嵌入、可协商的AI上下文通信标准

1. 这不是又一个“AI插件”&#xff0c;而是Unity开发工作流的底层重定义你有没有过这样的时刻&#xff1a;在Unity里反复调整Animator Controller的过渡条件&#xff0c;只为让角色转身动画不穿模&#xff1b;写完一段NavMesh寻路逻辑&#xff0c;却要花两小时调试Agent卡在斜…...

Visual Studio 项目属性页开发完全教程:从基础到高级

Visual Studio 项目属性页开发完全教程&#xff1a;从基础到高级 【免费下载链接】project-system The .NET Project System for Visual Studio 项目地址: https://gitcode.com/gh_mirrors/pr/project-system Visual Studio 项目属性页是开发者管理项目配置的核心界面&a…...

2026在线测评系统十大量表对比:信效度与场景全解析

【30s 核心摘要】2026 年在线测评成人才管理刚需&#xff0c;信效度与场景适配成选型核心。本文聚焦十大量表&#xff0c;从信度、效度、适配场景等维度深度对比&#xff0c;重点解析问卷星、北森、金数据等主流平台的量表能力与落地效果&#xff0c;为企业、高校及机构提供科学…...

ParaView时间戳设置全攻略:从基础标注到自定义格式(5.8.0实测)

ParaView时间戳设置全攻略&#xff1a;从基础标注到自定义格式&#xff08;5.8.0实测&#xff09; 在科学可视化领域&#xff0c;时间戳不仅是数据演变的见证者&#xff0c;更是研究成果呈现的专业语言。ParaView作为开源可视化工具链的标杆&#xff0c;其时间标注功能在学术论…...

SSE 基础知识

SSE 基础知识 一、概念定义 SSE 全称 Server-Sent Events&#xff0c;是基于HTTP协议的服务器单向数据推送技术。 建立一次长连接后&#xff0c;服务端可主动持续向前端推送数据&#xff0c;无需客户端反复轮询请求。 二、核心特点 单向通信&#xff1a;仅服务器 → 客户端发送…...

Windows 10/11系统下,SecureCRT 8.7.2保姆级安装与激活图文指南(含Keygen使用避坑点)

Windows平台SecureCRT 8.7.2全流程部署与安全配置指南在当今远程运维与网络管理的日常工作中&#xff0c;一款可靠的终端仿真工具如同工程师的瑞士军刀。作为行业标杆的SecureCRT&#xff0c;其8.7.2版本在Windows 10/11环境下的部署却常让新手陷入各种技术陷阱——从安装路径选…...

户外实用|艾迪欧 R6000 测评 —— 户外 / 自驾 / 露营的通讯好搭档

户外出行&#xff0c;通讯工具的核心是稳定、清晰、耐用、续航久、功能全。艾迪欧 R6000 作为一款兼顾专业与户外的 DMR 对讲机&#xff0c;全频段覆盖、双模通讯、自定义功能、长续航&#xff0c;完美适配自驾、露营、登山、越野等户外场景&#xff0c;是户外爱好者的靠谱通讯…...

转行网络安全运维:从0到1的可落地指南

转行网络安全运维&#xff1a;从0到1的可落地指南 一、 「3个核心技能&#xff1a;从零起步也能会」 网上学习资料多到爆炸&#xff0c;不用纠结“哪个最好”&#xff0c;记住一句话&#xff1a;**能学会、能上手的就是好的**&#xff01;不管是免费视频还是付费课&#xff0c…...

告别CAJ格式困扰:3分钟学会用开源工具将知网文献转为PDF

告别CAJ格式困扰&#xff1a;3分钟学会用开源工具将知网文献转为PDF 【免费下载链接】caj2pdf Convert CAJ (China Academic Journals) files to PDF. 转换中国知网 CAJ 格式文献为 PDF。佛系转换&#xff0c;成功与否&#xff0c;皆是玄学。 项目地址: https://gitcode.com/…...

Unity项目DrawCall降不下来?试试用Mesh Baker合并贴图集,保姆级图文教程

Unity性能优化实战&#xff1a;用Mesh Baker合并贴图集降低DrawCall全流程解析当你的Unity项目帧率开始卡顿&#xff0c;Profiler里DrawCall数字居高不下时&#xff0c;合并贴图集往往是解决问题的关键一步。本文将以一个实际项目为例&#xff0c;带你从零开始使用Mesh Baker的…...