Toolbar 不为人知的助手,ActionMenuView

2024-06-03 12:08

本文主要是介绍Toolbar 不为人知的助手,ActionMenuView,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Toolbar 不为人知的助手,ActionMenuView

封面图来自这次长滩岛旅行。第一次出国,感受颇深,绝不是一言两语能够描述的。只有亲自体验过,才能懂得当初女教师辞职信里的那句瞬间爆红的话:“世界那么大,我想去看看。”

不久前,对 Toolbar 控件的使用写了一篇总结性的文章:Android Toolbar,你想知道的都在这里了,本文应该算是一个补充完善吧,将 ActionMenuView 的使用加入其中。

平时我们在使用 Toolbar 的时候,很少会用到 ActionMenuView 这个控件。虽然用起来很简单,但是很多伙伴并不知道他的存在,因为他的使用场景确实少见,我所能列举的也只有两个:

第一个,大家知道,Toolbar 默认将 Menu 内容摆放在右边,空间不足时溢出到 OverFlow 窗口中。比如现在有个需求,要将 Menu 的位置摆放在左边,也就是与 Title 相邻的右边,那该如何控制呢?

第二个,动态添加或者删除 Menu Item ,又该如何实现呢?当然,你也能使用 visible 属性来控制,但很显然,这不是一个很好的解决方案。

以上两个应用场景比较特殊,但也不是没有出现的可能。如果你知道 ActionMenuView 的存在的话,处理起来就很得心应手。

ActionMenuView 是将原本位于 Toolbar 或者 ActionBar 中的 Menu 内容移到自己的名下,以 ViewGroup 的姿态将一些列的 Menu Item 囊括其中,再将自己搁置于 Toolbar 容器中,这样,更方便于管理和呈现 Menu 内容。所以,原本孤立的 Toolbar 控件,就有了一个 Child,代码如下:

Toolbar 不为人知的助手,ActionMenuView

再在 Activity 文件中,将 Menu 资源文件加载到使用 findViewById() 方法获取到的 ActionMenuView 对象中:

Toolbar 不为人知的助手,ActionMenuView

至于 Menu Item 的点击事件方法 onOptionsItemSelected 无需改动,只要将 ActionMenuView 对象的点击事件设置转移即可:

Toolbar 不为人知的助手,ActionMenuView

还可以利用 getMenu() 方法获取到 Menu 对象,动态添加或删除 Menu Item,甚至加载另外一个 Menu 资源文件,比如:

mHomeAmv.getMenu().clear();

getMenuInflater().inflate(R.menu.search, mSearchAmv.getMenu());

现在有这样一个需求,设计图如下 ( 图片来源:stack overflow ) :

Toolbar 不为人知的助手,ActionMenuView

就可以利用 ActionMenuView 控制 Menu Item 的位置了。当然,这里面还需要另外几个知识点,顺便补充说明一下。

第一,Menu Item 间距问题。Item 默认的宽度是56dp ,可以利用 style 中的属性修改,并将样式设置给 Activity 主题即可,比如:

Toolbar 不为人知的助手,ActionMenuView

第二,Menu Item 图标高亮问题。当然,你可以使用两套图标,在点击时修改设置。但使用一套图标也能做到,还能减少 APK 文件大小,比如:

Toolbar 不为人知的助手,ActionMenuView

介绍完毕,这些知识点已补充至博客 Toolbar 一文中,想了解更多工具栏知识,可以查看作者博文。另外,今天是「感恩节」(每年11月份第四个星期四),感谢生命中每一个与我相识或不曾相识的人,是你们让我的生命更加丰富多彩,让我不曾后悔走过的每一步路,向着阳光,一点一点稳稳前行!

本文为头条号作者原创。未经授权,不得转载。

这篇关于Toolbar 不为人知的助手,ActionMenuView的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1026944

相关文章

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

好用的AI编程助手MarsCode[豆包]

欢迎来到 Marscode 的世界!这里将为你揭秘 Marscode,它的独特之处、应用领域等相关精彩内容等你来探索。 一、打开VS Code 二、选择 Extensions,搜索marscode 三、点击安装 四、点击使用 五、输入需要编写的代码 六、根据自己的需求修改代码 MarsCode 注册

Android ToolBar+DrawerLayout的实现

实现思路: 1.关联相应的依赖包 compile ‘com.android.support:appcompat-v7:25.3.1’ 2.主布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"

基于VS2022+Qt5+C++的网络调试助手开发

目录 一、前言 二、环境准备以及项目创建 三、 项目实现 1.ui界面设计 2.添加NetWork模块   QTcpSocket 和 QTcpServer QUdpSocket 3.主要功能实现  ①IP扫描 ②端口设置  ③数据接收 ④数据发送 ⑤日志保存 4.打包成exe 四、效果展示 五、总结 一、前言 我之前用基于pyqt5一共实现过俩款小工

保研 比赛 利器: 用AI比赛助手降维打击数学建模

数学建模作为一个热门但又具有挑战性的赛道,在保研、学分加分、简历增色等方面具有独特优势。近年来,随着AI技术的发展,特别是像GPT-4模型的应用,数学建模的比赛变得不再那么“艰深”。通过利用AI比赛助手,不仅可以大大提升团队效率,还能有效提高比赛获奖几率。本文将详细介绍如何通过AI比赛助手完成数学建模比赛,并结合实例展示其强大功能。 一、AI比赛助手的引入 1. 什么是AI比赛助手? AI比

uAI - AI Assistant 人工智能辅助助手插件

uAI助手支持GPT 3.5 Turbo、GPT 3.5 Turbo16K、GPT 4-8k和GPT 4 Turbo-128k 什么是uAI助理? uAI Assistant是Unity游戏引擎的强大扩展,它使用GPT AI帮助游戏开发人员轻松创建专业代码和引人入胜的游戏内容。 你需要一个OpenAI密钥才能使用uAI助手!阅读我们的文档以获取更多说明。 得益于OpenAI最新的GPT模型,价

超单助手:多多动销出评必备-云端独享小号-操作简单易上手

图片:超单 文章:零零落落 作者:yunchang227 在电商领域,特别是在拼多多这个快速发展的平台上,商品的曝光率与销量提升是卖家关注的核心。超单助手作为一款综合性的电商辅助工具,凭借其全面的功能和云端技术优势,为拼多多商家提供了有力支持。 一、全面覆盖电商运营需求: 订单生成自动化:简化复杂操作,提高效率。 评价管理批量化:有效提升商品信誉。 销售数据实时监控:洞察市场趋势

ai智能写作助手批量生成文章,提升工作效率!

在当今快节奏的工作环境中,时间就是金钱,效率就是生命。对于需要大量产出文章的工作者来说,如何在有限的时间内创作出高质量的内容,成为了一个亟待解决的问题。而AI智能写作助手的出现,为这一问题提供了解决方案。本文将从创作者的角度出发,探讨AI智能写作如何批量生成文章,并提升工作效率。   作为一名创作者,我深知创作大量内容的艰辛。每天都要绞尽脑汁地构思新的主题,挖掘独特的视角,还要用精准、生

用亚马逊AI代码开发助手Amazon Q Developer开发应用(上篇)

快用人工智能帮程序员写代码!今天小李哥就来介绍亚马逊推出的国际前沿人工智能AI代码开发助手Amazon Q Developer。目前该代码助手在Hugging Face代码生成权威测试集SWE-bench中排名第一,可以根据我们的需求生成整个代码项目,并可以帮助我们解释代码、提供架构设计方案、编写代码测试案例、提供漏洞扫描和修复建议、基于我们GitHub代码库中的历史代码生成新的代码段。 接下来