小案例:ToolBar+选项菜单

使用选项菜单,一般是用于做单选,需要重写方法:

public boolean onCreateOptionsMenu(Menu menu)

如果想要实现事件监听,则采用基于回调的事件监听机制,可以监听到具体是哪一项被选中。即重写方法:

public boolean onOptionsItemSelected(@NonNull MenuItem item)

以前的版本使用的是ActionBar,现在新的版本更推荐使用ToolBar。所以,以前的方法getActionBar或者getSupportActionBar获取出来的结果为Null的可能性巨大,建议不要再使用(避坑)。

案例:ToolBar+选项菜单

布局中使用ToolBar

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><androidx.appcompat.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="wrap_content"><ImageViewandroid:layout_width="32dp"android:layout_height="32dp"android:src="@drawable/a"/><TextViewandroid:id="@+id/textView"android:layout_width="match_parent"android:layout_height="32dp"android:gravity="center"android:text="标题文字"/></androidx.appcompat.widget.Toolbar>
</LinearLayout>

设计图效果

逻辑文件中,首先声明属性,再绑定组件,接下来将ToolBar设置为ActionBar

即可看到和效果图一样的效果

接下来,想要显示选项菜单,也就是【标题文字】的右侧还要显示【...】,并且点击后,能显示菜单,实现选择不同颜色,就可以改变【标题文字】的颜色

逻辑文件中重写方法onCreateOptionsMenu

@Overridepublic boolean onCreateOptionsMenu(Menu menu) {SubMenu subMenu = menu.addSubMenu("字体颜色");subMenu.add(0,1,0,"红色");subMenu.add(0,2,0,"绿色");subMenu.add(0,3,0,"蓝色");subMenu.add(0,4,0,"粉色");subMenu.setGroupCheckable(0,true,true);return super.onCreateOptionsMenu(menu);}

该方法的目的是点击三个点的时候,能弹出选择项,并设置为单选

接下来,还需要做基于回调的事件监听

重写监听方法

public boolean onOptionsItemSelected(@NonNull MenuItem item) {int itemId = item.getItemId();if (itemId==1){Toast.makeText(this, "红色", Toast.LENGTH_SHORT).show();TextView textView = toolbar.findViewById(R.id.textView);textView.setTextColor(Color.RED);} else if (itemId==2) {Toast.makeText(this, "绿色", Toast.LENGTH_SHORT).show();TextView textView = toolbar.findViewById(R.id.textView);textView.setTextColor(Color.GREEN);} else if (itemId==3) {Toast.makeText(this, "蓝色", Toast.LENGTH_SHORT).show();TextView textView = toolbar.findViewById(R.id.textView);textView.setTextColor(Color.BLUE);} else if (itemId==4) {Toast.makeText(this, "粉色", Toast.LENGTH_SHORT).show();TextView textView = toolbar.findViewById(R.id.textView);textView.setTextColor(Color.rgb(30,15,200));}return super.onOptionsItemSelected(item);}

逻辑是:选择选项1,就把【标题文字】的颜色改为红色;其余的如法炮制

整体逻辑文件:

package com.yibinu.actionbardemo;import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {Toolbar toolbar;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);toolbar = findViewById(R.id.toolbar);setSupportActionBar(toolbar);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {SubMenu subMenu = menu.addSubMenu("字体颜色");subMenu.add(0,1,0,"红色");subMenu.add(0,2,0,"绿色");subMenu.add(0,3,0,"蓝色");subMenu.add(0,4,0,"粉色");subMenu.setGroupCheckable(0,true,true);return super.onCreateOptionsMenu(menu);}@Overridepublic boolean onOptionsItemSelected(@NonNull MenuItem item) {int itemId = item.getItemId();if (itemId==1){Toast.makeText(this, "红色", Toast.LENGTH_SHORT).show();TextView textView = toolbar.findViewById(R.id.textView);textView.setTextColor(Color.RED);} else if (itemId==2) {Toast.makeText(this, "绿色", Toast.LENGTH_SHORT).show();TextView textView = toolbar.findViewById(R.id.textView);textView.setTextColor(Color.GREEN);} else if (itemId==3) {Toast.makeText(this, "蓝色", Toast.LENGTH_SHORT).show();TextView textView = toolbar.findViewById(R.id.textView);textView.setTextColor(Color.BLUE);} else if (itemId==4) {Toast.makeText(this, "粉色", Toast.LENGTH_SHORT).show();TextView textView = toolbar.findViewById(R.id.textView);textView.setTextColor(Color.rgb(30,15,200));}return super.onOptionsItemSelected(item);}
}

效果:

Toolbar+选项菜单

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2980113.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Kafka学习笔记(二、linux和docker安装及使用demo)

1.安装启动 1.1.下载解压 官网下载地址将下载的tar包上传到服务器一个目录&#xff0c;然后解压$ tar -xzf kafka_2.13-3.7.0.tgz $ cd kafka_2.13-3.7.01.2. 启动环境 需安装Jdk8&#xff0c;Kafka可以使用ZooKeeper或KRaft启动。 ZooKeeper启动 运行如下命令&#xff0c;…

windows系统下python开发工具安装

一. 简介 前一篇文章学习了安装 python解释器&#xff0c;文章如下&#xff1a; windows系统下python解释器安装-CSDN博客 本文来学习如何下载安装 python开发工具 PyCharm。 二. python开发工具 PyCharm下载安装 1. PyCharm官网 PyCharm开发工具 PyCharm为 python代码…

【学习笔记二十四】EWM补货策略和自动补货配置

一、EWM补货策略概述 1.计划补货 ①以联机或批处理模式启动 ②根据最大和最小数量计算补货 ③仅当库存量低于最低数量时才开始 ④四舍五入至最小补货数量的倍数 2.自动补货 ①在WT确认期间启动 ②根据最大和最小数量计算补货 ③只有当库存量低于最低数量时才开始 ④四舍…

OpenWRT磁盘扩容(PVE虚拟机方案)

官方扩容指导文档 PVE给虚拟机磁盘扩容 给虚拟机磁盘扩容&#xff0c;选中OpenWRT的硬盘&#xff0c;随后选择调整大小 输入增量大小&#xff0c;即增加多少磁盘空间给硬盘。这里我选择增加4G 进入OpenWRT控制台界面安装一些linux常用查看磁盘的工具&#xff08;也可以通过网…

linux的一些实用操作

快捷键 强制停止 ctrlc强制停止或退出命令的输入 退出登出 ctrld强制退出用户登录或退出某些程序的专属页面&#xff08;如py&#xff09; ps&#xff1a;不能退出vi/vim 历史命令搜索 history可以查看历史命令&#xff0c;用来复制粘贴 在使用history之后&#xff0c;…

深度学习-数据预处理

目录 创建一个人工数据集处理缺失的数据插入对inputs中的类别值或离散值&#xff0c;将NaN视为一个类别对inputs和outputs中的数值类型转换为张量格式 创建一个人工数据集 import os import pandas as pd os.makedirs(os.path.join(.., data), exist_okTrue) data_file os.p…

【后端】PyCharm的安装指引与基础配置

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、PyCharm是什么二、PyCharm安装指引安装PyCharm社区版安装PyCharm专业版 三、配置PyCharm&#xff1a;四、总结 前言 随着开发语言及人工智能工具的普及&am…

sqlilabs靶场1—20题学习笔记(思路+解析+方法)

前几个题目较为简单&#xff0c;均尝试使用各种方法进行SQL注入 第一题 联合查询 1&#xff09;思路&#xff1a; 有回显值 1.判断有无注入点 2.猜解列名数量 3.判断回显点 4.利用注入点进行信息收集 爆用户权限&#xff0c;爆库&#xff0c;爆版本号 爆表&#xff0c;爆列&…

ABeam×StartUp丨蓝因机器人访问ABeam旗下德硕管理咨询(深圳)新创部门,展开合作交流

近日&#xff0c;深圳蓝因机器人科技有限公司&#xff08;以下简称“蓝因机器人”&#xff09;创始人陈卜铭先生来访ABeam旗下德硕管理咨询&#xff08;深圳&#xff09;有限公司&#xff08;以下简称“ABeam-SZ”&#xff09;&#xff0c;与新创部门展开合作交流。 交流中&am…

【无线通信】OQPSK

调制 sps 8; RolloffFactor 0.2; FilterSpanInSymbols 10;bits randi([0, 1], 224*8, 1); % 1792symbols bits*2 - 1; % 1792 re -symbols(2:2:end); % 896 im -symbols(1:2:end); % 896pFilterTx comm.RaisedCosineTransmitFilter(...Shape, Square root, ...Rollo…

Linux进程详解二:创建、状态、进程排队

文章目录 进程创建进程状态进程排队 进程创建 pid_t fork(void) 创建一个子进程成功将子进程的pid返回给父进程&#xff0c;0返回给新创建的子进程 fork之后有两个执行分支&#xff08;父和子&#xff09;&#xff0c;fork之后代码共享 bash -> 父 -> 子 创建一个进…

这届年轻人,对AI对象上头

在AI技术飞速发展的今天&#xff0c;虚拟对象这一概念也流行了起来。从AI女友到AI男友&#xff0c;这些基于人工智能的AI社交应用正在改变我们对情感陪伴的认知。本文深入探讨了AI虚拟对象的兴起、用户需求、商业模式以及技术局限&#xff0c;不妨来看一下。 继2023年文生文大语…

dremio支持设置

Dremio 支持提供可用于诊断目的的设置。这些设置通过 Dremio UI&#xff1a;设置>支持启用&#xff08;或禁用&#xff09; 使用 Client Tools 可以配置当用户查看数据集中的数据时&#xff0c;Dremio 项目的工具栏上显示哪些客户端应用程序按钮。用户可以通过单击相应的工具…

多线程情况下IBMMQ报文丢失原因分析

背景 最近工作中&#xff0c;使用IBMMQ&#xff0c;重启服务时有偶发性的报文丢失情况&#xff0c;应用从队列中获取到了消息&#xff0c;但是线程停止没有处理。 分析 消息处理线程流程&#xff1a; 判断线程状态是否可用&#xff0c;如果不可用直接返回。使用MQQueue.get…

OpenHarmony开源鸿蒙NEXT星河版内核嵌入式编程

一、前景提要 2024年1月18日&#xff0c;华为放出HarmonyOS NEXT 鸿蒙星河版开发者预览版本&#xff08;不是HarmonyOS NEXT版&#xff0c;是HarmonyOS NEXT星河版&#xff09;&#xff0c;首次提到用鸿蒙内核&#xff08;暂命名&#xff09;取代了Linux内核。 该内核源码还未放…

html网页在展示时,监听网络是否断网,如果断网页面暂停点击响应

序言&#xff1a; 集合百家之所长&#xff0c;方著此篇文章&#xff0c;废话少说&#xff0c;直接上代码&#xff0c;找好你的测试网页&#xff0c;进行配置&#xff0c;然后复制粘贴代码&#xff0c;就可以了。 1.css文件内容 #newbody{display: none;width: 100%;height: 9…

检索增强生成(RAG)技术

随着大型语言模型&#xff08;LLMs&#xff09;在自然语言处理&#xff08;NLP&#xff09;领域的显著进步&#xff0c;它们在多个评估基准测试中显示出超越人类水平的语言和知识掌握能力。然而&#xff0c;这些模型在实际应用中也面临着一系列挑战&#xff0c;如制造事实、知识…

茶饮门店本地生活抖音团购运营方案计划书

【干货资料持续更新&#xff0c;以防走丢】 茶饮门店本地生活抖音团购运营方案计划书 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 PPT可编辑80页&#xff08;完整资料包含以下内容&#xff09; 目录 抖音本地生活运营方案 1. 账号基础搭建与优化 - 门店账号…

第26天:安全开发-PHP应用模版引用Smarty渲染MVC模型数据联动RCE安全

第二十六天 一、PHP新闻显示-数据库操作读取显示 1.新闻列表 数据库创建新闻存储代码连接数据库读取页面进行自定义显示 二、PHP模版引用-自写模版&Smarty渲染 1.自写模版引用 页面显示样式编排显示数据插入页面引用模版调用触发 2.Smarty模版引用 1.下载&#xff1a…

Dijkstra算法,你的最短路来了!

录友们&#xff0c;最近我在图论方面已经开始更最短路系列了&#xff0c;讲好最短路问题&#xff0c;其实也是很难的&#xff0c;本篇我仅仅是讲了朴素版Dijkstra&#xff0c;但就写了将近1w字&#xff0c;画了二十张图。学算法易&#xff0c;讲清楚难&#xff01; 题目链接 …