[Android]使用原生Menu的一些小Tip
16lz
2021-01-24
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>
Menu Item
- 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;}
更多相关文章
- android自定义menu,PopUpWindow弹出菜单
- 替换Android控件默认样式 (例子:自定义进度条)
- Android(安卓)TextView中字体行间距的设置
- AndroidStudio实现按钮按下时状态改变以及选择器属性及基本用法
- Android(安卓)ScrollView 中放入 ImageView 的出现上下空白
- Android(安卓)Gems — Fragment本质之View管理
- Android(安卓)Manifest之元素中文注释
- 自定义控件:onDraw 方法实现仿 iOS 的开关效果
- Android更改Activity样式和隐藏标题