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