Overflow menu的样式

  • Overflow menu显示位置

在Holo Theme时代,overflow menu会显示在原生ActionBar的下方,而在API>=21,结合了Toolbar使用的overflow menu则会覆盖在Toolbar上显示。如果依然想要实现类似Holo主题的效果,不重叠,overflow在Toolbar下方,可以使用如下方式:
在styles文件中的AppTheme中增加

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">    ------------->    <item name="actionOverflowMenuStyle">@style/OverflowMenu    style><style name="OverflowMenu" parent="Widget.AppCompat.PopupMenu.Overflow">    <item name="overlapAnchor">falseitem>style>

为了在API >= 21的设备上也能生效,需要在工程res下的values-v21文件夹中增加同名styles文件,在其中定义:

<style name="OverflowMenu" parent="Widget.AppCompat.PopupMenu.Overflow">    <item name="android:overlapAnchor">falseitem>style>

还有另外一种情况,就是Activity使用了这个AppTheme,同时Activity内的Toolbar单独使用了popupTheme属性,像这样:

<android.support.v7.widget.Toolbar    android:id="@+id/toolbar"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:background="?attr/colorPrimary"    android:fitsSystemWindows="true"    app:popupTheme="@style/ToolbarPopupMenu"/>

这个时候AppTheme中关于Overflow menu的样式定义会被popupTheme覆盖掉,没有了效果。解决办法就是在ToolbarPopupMenu中增加OverflowMenu:

<style name="ToolbarPopupMenu" parent="Base.ThemeOverlay.AppCompat.ActionBar">    <item name="actionOverflowMenuStyle">@style/OverflowMenustyle>
  • Overflow menu的字体颜色及背景

实现给Toolbar的溢出菜单设置字体颜色及背景,Toolbar增加属性

app:popupTheme="@style/ToolbarPopupMenu"

属性具体内容:

<style name="ToolbarPopupMenu" parent="Base.ThemeOverlay.AppCompat.ActionBar">    <item name="android:textColorPrimary">#ffffffitem>    <item name="android:background">@color/primarystyle>
  • actionLayout

可以给Toolbar上显示的Menu定义一个简单的布局,只要menu的item添加以下属性即可

app:actionLayout="@layout/action_layout"

以这种方式定义了menu的图标之后,在Activity#onOptionsItemSelected()中无法再响应其点击事件,解决办法是在Activity#onCreateOptionsMenu()中获取到menu,给这个menu设置点击事件:

public boolean onCreateOptionsMenu(Menu menu){    getMenuInflater().inflate(R.menu.menu_action, menu);    View view = menu.getItem(0).getActionView();    view.setOnClickListener(new OnClickListener() {        @Override        public void onClick(View v) {        }    });    return true;}

更多相关文章

  1. android自定义menu,PopUpWindow弹出菜单
  2. 替换Android控件默认样式 (例子:自定义进度条)
  3. Android(安卓)TextView中字体行间距的设置
  4. AndroidStudio实现按钮按下时状态改变以及选择器属性及基本用法
  5. Android(安卓)ScrollView 中放入 ImageView 的出现上下空白
  6. Android(安卓)Gems — Fragment本质之View管理
  7. Android(安卓)Manifest之元素中文注释
  8. 自定义控件:onDraw 方法实现仿 iOS 的开关效果
  9. Android更改Activity样式和隐藏标题

随机推荐

  1. Android(安卓)2.2 带来全新拍照增强特性
  2. 【翻译】App Architecture (Android架构
  3. 刨根问底-论Android“沉浸式”
  4. Handler 消息传递机制
  5. Android(安卓)适配Dark Theme(暗黑模式)
  6. 对Android中XML解析的小结
  7. Android(安卓)开发之对拍照和录像功能的
  8. 欢迎加入Java和Android架构知识星球
  9. Android(安卓)UI设计(转)
  10. Android(安卓)实践:做一款可用的天气 APP