我有一个BottomNavigationView
:
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/bg_item"
android:foreground="?attr/selectableItemBackground"
app:labelVisibilityMode="unlabeled"
app:menu="@menu/menu_bottom_navigation"
/>
然后我以编程方式向其添加最后一个项目,并为其图标使用2个不同的选择器:
if (isConditionMet) {
lastItemMenuItem.setIcon(R.drawable.ic_bottom_nav_last_item)
} else {
lastItemMenuItem.setIcon(R.drawable.ic_bottom_nav_last_item_with_red_dot)
}
这些选择器的外观如下。
ic_bottom_nav_last_item :
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_menu_last_item_selected" android:state_checked="true" />
<item android:drawable="@drawable/ic_menu_last_item" />
</selector>
ic_bottom_nav_last_item_with_red_dot:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_menu_last_item_with_red_dot_selected" android:state_checked="true"/>
<item android:drawable="@drawable/ic_menu_last_item_with_red_dot"/>
</selector>
所有这些可绘制对象在Android Studio的预览中看起来都还不错。例如,
ic_menu_last_item_with_red_dot_selected 的预览如下:
和 ic_menu_last_item_with_red_dot 的预览如下:
但是问题是生成的图标的颜色。默认情况下,red_dot_white_stroke
的显示方式如下:
生成的图标仅具有灰色和白色(在未选中模式下)或绿色(在已选中模式下),根本没有红色:
仅当我添加时,点变成红色
android:tintMode="screen"
到 red_dot_white_stroke 可绘制对象中的<shape>
标签:
但是在这种情况下,处于选定(选中)模式的该点将变为黄色(AFAIU,因为红色和绿色变为黄色)。 android:tintMode
属性的任何其他值都无济于事,因为其中一些(如src_over
或src_atop
)将红色变成了鲜艳的颜色:
其他人没有任何视觉效果或与"screen"
值具有相同的效果。我还尝试通过编程方式设置PorterDuff.Mode
的不同模式,例如:
lastItemMenuItem.setIcon(R.drawable.ic_bottom_nav_last_item_with_red_dot)
lastItemMenuItem.icon.setTintMode(PorterDuff.Mode.SRC)
但是它也没有成功。
如何在选定后使BottomNavigationView不着色图标? 为此,我尝试设置
app:itemIconTint="@null"
表示BottomNavigationView
,但不幸的是,这没有任何改变。