Android学习之Menu显示图标,同时不覆盖ToolBar的方法
【摘要】
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)