选定后如何使BottomNavigationView不着色图标?

时间:2019-05-14 10:37:16

标签: android bottomnavigationview

我有一个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 的预览如下:

enter image description here

ic_menu_last_item_with_red_dot 的预览如下:

enter image description here

但是问题是生成的图标的颜色。默认情况下,red_dot_white_stroke的显示方式如下:

enter image description here

生成的图标仅具有灰色和白色(在未选中模式下)或绿色(在已选中模式下),根本没有红色:

enter image description here

仅当我添加时,点变成红色

android:tintMode="screen"

red_dot_white_stroke 可绘制对象中的<shape>标签:

enter image description here

但是在这种情况下,处于选定(选中)模式的该点将变为黄色(AFAIU,因为红色和绿色变为黄色)。 android:tintMode属性的任何其他值都无济于事,因为其中一些(如src_oversrc_atop)将红色变成了鲜艳的颜色:

enter image description here

其他人没有任何视觉效果或与"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,但不幸的是,这没有任何改变。

0 个答案:

没有答案