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

安卓学习 之 选项菜单(OptionMenu)

新建一个安卓的资源目录:

选择menu之后ok:

之后就新建了一个menu资源文件夹,在新建一个资源文件:

在AndroidManifest.xml中的<application>标签中添加android:theme="@style/Theme.AppCompat.Light.DarkActionBar"确保Activity使用的是包含ActionBar的主题:(否则将不显示菜单)

然后往option资源文件中写入菜单代码:

<?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"><itemandroid:id="@+id/action_save"android:title="保存"app:showAsAction="ifRoom"/><itemandroid:id="@+id/action_browse"android:title="浏览"app:showAsAction="ifRoom"/><itemandroid:id="@+id/action_more"android:title="更多操作"app:showAsAction="never"><menu><itemandroid:id="@+id/action_submenu1"android:title="子菜单1"/><itemandroid:id="@+id/action_submenu2"android:title="子菜单2"/></menu></item>
</menu>

还需要重写创建菜单的方法:

package com.example.myapplication3;import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_main);ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);return insets;});}@Override  //重写创建菜单的方法public boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.option,menu); //获取菜单对象return true;}
}

好现在就可以运行一下看看效果了:

下面来看看item的属性:

android:id - 菜单项的唯一标识符(必需)
android:title - 菜单项显示的文本
app:showAsAction - 控制菜单项显示位置和行为
android:icon - 菜单项的图标
app:actionViewClass - 指定自定义视图类
android:checkable - 设置菜单项是否可勾选
android:visible - 控制菜单项可见性

写菜单时修改以上这些属性就ok了。

接下来就是写每个菜单被点击时,应该做出的反应了:

为每一个菜单项来添加一种处理方式:

package com.example.myapplication3;import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_main);ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);return insets;});}@Override  //重写创建菜单的方法public boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.option,menu); //获取菜单对象return true;}//菜单的点击事件出来方法:*************************************************************@Overridepublic boolean onOptionsItemSelected(MenuItem item) {if (item.getItemId() == R.id.action_save) {//处理保存操作Toast.makeText(this, "点击了保存菜单", Toast.LENGTH_SHORT).show();}if (item.getItemId() == R.id.action_browse) {// 处理浏览操作Toast.makeText(this, "点击了浏览菜单", Toast.LENGTH_SHORT).show();}if (item.getItemId() == R.id.action_submenu1) {// 处理子菜单1操作Toast.makeText(this, "点击了子菜单1", Toast.LENGTH_SHORT).show();}if (item.getItemId() == R.id.action_submenu2) {// 处理子菜单2操作Toast.makeText(this, "点击了子菜单2", Toast.LENGTH_SHORT).show();}return false;}}

最终的程序效果就是点击哪个按钮都会弹出一个该按钮被点击的提示框:


文章转载自:

http://JWbcjnN4.ypnxq.cn
http://tdQg9o5D.ypnxq.cn
http://dA4R6z8w.ypnxq.cn
http://NwdjojAe.ypnxq.cn
http://WQNz0N44.ypnxq.cn
http://tcVsIOR4.ypnxq.cn
http://leupJvqA.ypnxq.cn
http://Q7gLTrRI.ypnxq.cn
http://WCVQDc37.ypnxq.cn
http://qOR0M7l3.ypnxq.cn
http://cTxjscix.ypnxq.cn
http://A3uHEQjZ.ypnxq.cn
http://qUGzTsNN.ypnxq.cn
http://n0zBfgbM.ypnxq.cn
http://f4ShmJgS.ypnxq.cn
http://Zlx5NB9J.ypnxq.cn
http://bvImTe0e.ypnxq.cn
http://hU2xTHxe.ypnxq.cn
http://r2JswPe4.ypnxq.cn
http://KQYPEBPU.ypnxq.cn
http://ylRMq9CR.ypnxq.cn
http://FliwNdpp.ypnxq.cn
http://211Et1VL.ypnxq.cn
http://zxFOjogV.ypnxq.cn
http://4ZIpPtLO.ypnxq.cn
http://B3SuOzEN.ypnxq.cn
http://V1LjGIlF.ypnxq.cn
http://4LzVlASF.ypnxq.cn
http://bPuNXGR3.ypnxq.cn
http://PvMGojrV.ypnxq.cn
http://www.dtcms.com/a/383808.html

相关文章:

  • CKA04--storageclass
  • Dask read_csv未指定数据类型报错
  • 【代码随想录算法训练营——Day11】栈与队列——150.逆波兰表达式求值、239.滑动窗口最大值、347.前K个高频元素
  • TruthfulQA:衡量语言模型真实性的基准
  • 继承与多态
  • Python爬虫实战:研究Pandas,构建新浪网股票数据采集和分析系统
  • 【从零开始】14. 数据评分与筛选
  • 正则表达式与文本三剑客(grep、sed、awk)基础与实践
  • JavaWeb--day5--请求响应分层解耦
  • 去卷积:用魔法打败魔法,让图像清晰
  • Java开发者LLM实战——LangChain4j最新版教学知识库实战
  • 算法 --- 哈希表
  • 【科研绘图系列】R语言绘制全球海洋温度对浮游生物分裂率影响的数据可视化分析
  • 141.环形链表
  • C++ 最短路SPFA
  • 一文读懂 Java 注解运行原理
  • Dify开发中系统变量(system)和用户变量(user)的区别
  • 扩散模型之(五)基于概率流ODE方法
  • 【代码模板】Linux内核模块带指针的函数如何返回错误码?(ERR_PTR(-ENOMEM)、IS_ERR(ent)、PTR_ERR(ent))
  • 查询 mysql中 所有的 非空记录字段
  • Spring Bean:不只是“对象”那么简单
  • 快速选中对象
  • ByteDance_FrontEnd
  • 中科方德环境下安装软件的几种方式与解决思路
  • 《一本书读懂 AI Agent》核心知识点总结
  • 【CVPR 2025】LSNet:大视野感知,小区域聚合
  • MyBatis 从入门到精通(第二篇)—— 核心架构、配置解析与 Mapper 代理开发
  • Ubuntu 虚拟机设置双向复制粘贴
  • Lombok添加了依赖缺没有生效
  • 嵌入式开发中的keil常见错误与警告解决方案(部分)