文章总结 : 三个点 :
① menu想要显示在actionbar 位置下面
② menu 想要显示图片
③ 禁用掉系统的菜单栏
第一点 : menu我想让它显示在actionbar或者toolbar位置之下
做出如下修改 ,在style里面做出修改 :
① menu想要显示在actionbar 位置下面
② menu 想要显示图片
③ 禁用掉系统的菜单栏
第一点 : menu我想让它显示在actionbar或者toolbar位置之下
做出如下修改 ,在style里面做出修改 :
<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> <item name="overlapAnchor">false</item> // 最主要的是这句话,默认的是显示在actionbar上面的 </style>
第二点 :显示图片
你的menu的xml可能是这样写的 :
你的menu的xml可能是这样写的 :
书上看到 : 想要同时显示图片和标题 showAsAction 可以指定为 withText
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:orderInCategory="80" android:id="@+id/mn_it_download" android:icon="@drawable/ic_download_menu" android:title="@string/download" app:showAsAction="never"/> // 不显示在actionbar上面,但同时它也会禁止图片显示 <item android:id="@+id/mn_it_search" android:title="@string/search" app:showAsAction="never"/> </menu>
当你想让这些title显示在toolbar 上的时候,而不是单独在一个下拉的栏目里显示 : 这样做--->
app:showAsAction = "always" -->注意是 :app
这个时候你就要这样做 : 直接拷贝就可以,通过反射让图片显示出来
@Override protected boolean onPrepareOptionsPanel(View view, Menu menu) { if (menu != null) { if (menu.getClass() == MenuBuilder.class) { try { Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE); m.setAccessible(true); m.invoke(menu, true); } catch (Exception e) { } } } return super.onPrepareOptionsPanel(view, menu); }
第三点 : 禁用 菜单栏
menu正常显示了,你可能会发现有的手机点击系统菜单栏会在屏幕底部出现,不想让它显示的话:
禁用掉系统菜单栏 :
@Override public boolean dispatchKeyEvent(KeyEvent event) { if (event.getKeyCode() == KeyEvent.KEYCODE_MENU) { return true; // 消费掉事件,就可以拦截 } return super.dispatchKeyEvent(event); }