博主声明:

转载请在开头附加本文链接及作者信息,并标记为转载。本文由博主 威威喵 原创,请多支持与指教。

本文首发于此   博主:威威喵  |  博客主页:https://blog.csdn.net/smile_running

  • 介绍

在 android 中经常看到可以点击一个按钮跳出一个类似对话框的界面,在这个界面里可以存放一些菜单选项并且可以赋予点击事件。现在来看一个这样的菜单效果,如 Actionbar 的 menu 菜单,点击 menu 按钮可以弹出更多的子选项按钮,效果图如下:

  • 创建 menu 资源文件

如上图的效果,在 activity 中已经提供了这样的一个方法可以创建选项菜单,这个方法为:onCreateOptionMenu(Menu menu);我们只需要在 activity 里面重写此方法即可实现上图的效果。

首先,我们需要在 res 资源文件夹下新建一个 menu 的文件夹,此文件夹下即存放 xml 文件的目录,我们新建一个 option.xml,

然后在其中写入需要的 item 资源,这里必须要写入两个属性,一个是:id,一个是:title

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:id="@+id/menu_1"android:title="menu one" /><itemandroid:id="@+id/menu_2"android:title="menu_two" /><itemandroid:id="@+id/menu_3"android:title="menu_three" />
</menu>
  • 关联活动,绑定事件

然后在 activity 中重写 onCreateOptionMenu 方法,加载我们刚刚的 option.xml 文件,然后要返回一个 true ,表示启用菜单:

    @Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.options, menu);return true;}

重新运行一下,然后你就会看到菜单效果了。

光是有菜单不行,我们应该给予它每一个子选项的点击事件,这个 activity 也已经有了,我们只需要重写 onOptionsItemSelected(MenuItem item);方法就可以绑定点击事件了,与 Button 的绑定事件类似。

  @Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case R.id.menu_1:Toast.makeText(this,"option 1",Toast.LENGTH_SHORT).show();break;case R.id.menu_2:Toast.makeText(this,"option 2",Toast.LENGTH_SHORT).show();break;case R.id.menu_3:Toast.makeText(this,"option 3",Toast.LENGTH_SHORT).show();break;default:break;}return super.onOptionsItemSelected(item);}

到此为止,我们的 menu 就算是完成了,算是非常简单。但是有一个问题,我发现 menu 跑到了 actionbar 的上方去了,也就是说把 actionbar 给挡住了,这样显得不那么美观,所以我们就要想办法让它下来一点,让它显示到 actionbar 下方,比如这个样子的效果:

  • 修改样式

这样子看起来效果不错,至少不会把 actionbar 给挡住了。为了实现这样的效果,我们就要去自定义它的一个主题,这个主题名字叫做:actionbarOverflowMenuStyle 。

    我们在 appTheme 下加入这个 item ,name = actionbarOverflowMenuStyle , 这里的 name 不可以写别的,否则将会报异常:not found,所以我们的 styles.xml 代码如下:

<resources><!-- Base application theme. --><style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"><!-- Customize your theme here. --><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item><!--suppress AndroidDomInspection --><item name="actionOverflowMenuStyle">@style/AppOverflowMenuStyle</item></style><style name="AppOverflowMenuStyle" parent="Base.Widget.AppCompat.Light.PopupMenu.Overflow"><!-- 不让它覆盖 actionbar --><item name="overlapAnchor">false</item><!-- 设置弹出的背景颜色 --><item name="android:popupBackground">#f33333</item></style>
</resources>

修改后的结果:

OptionsMenu 遮挡住 Actionbar、Toolbar 与样式更改相关推荐

  1. 安卓APP_ 控件(7)——Toolbar栏目样式

    摘自:安卓APP_ 控件(7)--Toolbar栏目样式 作者:丶PURSUING 发布时间: 2021-04-02 15:42:07 网址:https://blog.csdn.net/weixin_ ...

  2. div固定大小文字溢出自动缩小_CSS样式更改——框模型、定位、浮动、溢出

    前言 上篇文章主要介绍了CSS样式更改篇中的列表.表格和轮廓,这篇文章主要介绍CSS样式更改中框模型.定位.浮动.溢出基础知识. 1.框模型Border Model 从上图可以得知,如果把一个网页比作 ...

  3. css文本换行_CSS样式更改——文本Content

    上篇文章主要讲述了CSS样式更改中的背景Background,这篇文章我们来谈谈文本Content内容的基础用法 1)).首行缩进文本 <div style='text-indent:2em'& ...

  4. css 不换行_CSS样式更改——文本Content

    上篇文章主要讲述了CSS样式更改中的背景Background,这篇文章我们来谈谈文本Content内容的基础用法 1)).首行缩进文本 2)).文本对齐方式 3)).字间距 4)).文本间距 5)). ...

  5. java 更改css_CSS样式更改——文本Content

    上篇文章主要讲述了CSS样式更改中的背景Background,这篇文章我们来谈谈文本Content内容的基础用法 1)).首行缩进文本 2)).文本对齐方式 left 左边 right 右边 cent ...

  6. ActionBar -- Toolbar

    在使用ActionBar的时候,一堆的问题:这个文字能不能定制,位置能不能改变,图标的间距怎么控制神马的,由此暴露出了ActionBar设计的不灵活. 在上一篇中,我们只是简单使用了AppCompat ...

  7. Altium的原理图主题修改为Orcad的默认样式(Altium原理图样式更改)

    Altium默认的封装看久了总感觉不如Orcad的舒服,PCB的3D理应花里胡哨,但原理图还是该走极简主义.下面通过一些修改,将Altium的原理图样式更改为与Orcad相同. 过程看起来略微复杂,但 ...

  8. Markdown (CSDN) MD编辑器(二)- 文本样式(更改字体、字体大小、字体颜色、加粗、斜体、高亮、删除线)

    目录 1.Markdown现有的文本样式. 2.HTML的font标签-改字体.字体颜色.字体大小. 3.HTML的mark标签-标记文本 4.HTML的strong标签-加粗文本 5.HTML的em ...

  9. 3D角色遮挡住UI的实现,关于Stencil Buffer,描边,以及其他

    3D角色遮挡住UI的实现,关于Stencil Buffer,描边,以及其他 我这么懒的人能会写这篇博客,主因是这个需求对我造成的大量伤害~~~ 起因 最近服务器AI的工作刚刚阶段性完成,马上被策划拉过 ...

最新文章

  1. ThinkPHP简单的基础
  2. SAP WM 确认TO单据的时候修改目的地Storage Bin
  3. 学完python基础开始学爬虫_零基础入门Python爬虫不知道怎么学?这是入门的完整教程...
  4. 执行cp命令时提示cp: 略过目录
  5. c语言自学技巧,轻松学C语言,教给你学习技巧
  6. leetcode 之Single Number(13)
  7. StringEscapeUtils类的使用
  8. 【阿里云 CDP 公开课】 第二讲:CDH/HDP 何去何从
  9. Youtube最佳Red5 官方视频下载指南,字幕【亲测成功】
  10. dephi(pascal)中修改Label字体的样式(加粗,斜体,下划线)
  11. BZOJ 3876 支线剧情
  12. Win11使用CAD卡顿或者致命错误怎么办?Win11无法正常使用CAD
  13. 国内页游移植手游产品排名:现状和未来
  14. 小姜的Android之路
  15. python画苹果标志图片_替换/绘制/分享:让所有 App 拥有 macOS 11 Big Sur 风格的图标...
  16. 嵌入式之SD卡/U盘只读问题解决方案(FAT只读修复方式)
  17. linux一些简单的操作命令
  18. 用Matlab处理TDMS数据(降噪+频谱分析)
  19. Python中类调用类外面的函数
  20. DDR3的设计出现[Synth 8-5396]警告

热门文章

  1. MIFARE - 1
  2. mysql qps_关于mysql5.7的160万qps
  3. Gmod lua插件(Dishonored_Jump)解析
  4. 强调风格与态度,意大利运动时尚品牌 ellesse 2019秋冬系列 “FOR THE WIN”完美亮相
  5. 作为Java开发人员不会饿死的5个理由
  6. 均值回归的相当好的例子
  7. Win10系统电脑前置面板插上耳机没声音怎么办?解决方法
  8. 爬取了2021Java招聘需求,发现这些都要懂!
  9. 达梦数据库强制删除schema
  10. 20222023年文章分类整理