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

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>

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();
        }
    }
}
  • 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、https://blog.csdn.net/heisejiuhuche/article/details/46653999

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

猜你喜欢

转载自blog.csdn.net/ReCclay/article/details/81740166