Android学习之Menu显示图标,同时不覆盖ToolBar的方法

举报
ReCclay 发表于 2022/02/22 01:06:28 2022/02/22
【摘要】 Menu显示图标 STEP1 添加对应的菜单图标到合适的mipmap文件夹 app/src/main/res/menu/main.xml <?xml version="1.0" encodin...

Menu显示图标

STEP1 添加对应的菜单图标到合适的mipmap文件夹

  • app/src/main/res/menu/main.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/action_settings"
        android:icon="@mipmap/tcpclientwifi"
        android:title="     MQTT配置"/>

</menu>


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

STEP2 在主活动中通过反射显示图标

  • app/src/main/java/包名/MainActivity.java
//首页右上角菜单选项
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    //新建的xml文件
    setIconsVisible(menu, true);//设置菜单添加图标有效
    getMenuInflater().inflate(R.menu.main, menu);
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    //根据不同的id点击不同按钮控制activity需要做的事件
    switch (item.getItemId()) {
        case R.id.action_settings:
            //事件
            Toast.makeText(this, "You Clicked MQTT设置", Toast.LENGTH_SHORT).show();
            break;
    }
    return true;
}

/*反射的方法显示图标*/
private void setIconsVisible(Menu menu, boolean flag) {
    //判断menu是否为空
    if (menu != null) {
        try {
            //如果不为空,就反射拿到menu的setOptionalIconsVisible方法
            Method method = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
            //暴力访问该方法
            method.setAccessible(true);
            //调用该方法显示icon
            method.invoke(menu, flag);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

Menu覆盖ToolBar的解决方法

  • app/src/main/res/values/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>
        <item name="actionOverflowMenuStyle">@style/OverflowMenu</item>
    </style>

    <style name="OverflowMenu" parent="Base.Widget.AppCompat.PopupMenu.Overflow">
        <item name="overlapAnchor">false</item>
    </style>

</resources>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

参考:
1、https://blog.csdn.net/heisejiuhuche/article/details/46653999

2、https://blog.csdn.net/u013131445/article/details/68483041

文章来源: recclay.blog.csdn.net,作者:ReCclay,版权归原作者所有,如需转载,请联系作者。

原文链接:recclay.blog.csdn.net/article/details/81740166

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。