android,actionbar,menu显示,图片,菜单禁用★★★

文章总结 : 三个点 :
   ① 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可能是这样写的 :
       书上看到 : 想要同时显示图片和标题 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);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值