如何在Android MenuItem中使用Bitmap作为图标?技术求助
我之前也碰到过一模一样的情况!问题根源在于Android的**图标自动着色(tint)**机制——尤其是当你使用AppCompat或者Material Components主题时,系统会默认给所有Menu图标统一应用主题的着色颜色,这就是你看到绿色圆圈的原因(那个绿色就是你主题里的默认tint色值)。
下面给你几个靠谱的解决方法:
方法1:直接关闭单个MenuItem的图标着色
在你的navigation.xml的item标签里,添加android:iconTint="@null";如果项目用的是AppCompat库,记得改用app:iconTint="@null"(AppCompat的属性是app命名空间的)。修改后的代码示例:
<item android:id="@+id/id" android:icon="@drawable/bitmap_name" android:title="@string/title" android:iconTint="@null" />
这样就能让系统放弃对这个图标进行着色,直接显示PNG原本的样子。
方法2:在代码中动态取消着色
如果需要在运行时灵活控制,也可以在设置Menu的逻辑里添加这几行代码:
// 找到对应的MenuItem MenuItem targetItem = menu.findItem(R.id.id); // 取消图标着色 targetItem.getIcon().setTintList(null);
方法3:全局禁用Menu图标着色(不推荐)
如果你确定所有Menu图标都不需要系统自动着色,可以在主题配置里添加以下属性:
<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar"> <!-- 禁用ActionBar图标默认着色 --> <item name="actionBarIconTint">@null</item> <!-- 禁用Menu文本及图标的默认着色 --> <item name="actionMenuTextColor">@null</item> </style>
不过这个方法会影响所有Menu组件,除非有全局需求,否则优先用前两种精准控制的方式。
补充说明
你之前尝试的BitmapDrawable写法本身没问题,只是被系统的着色机制覆盖了效果,只要关闭着色就能正常显示啦。
内容的提问来源于stack exchange,提问作者Voreck
相关产品推荐
相关产品推荐

