Android底部导航更改项目选择上的文本和图标色调

Sag*_*hta 6 android bottomnavigationview

我最近探索了 Android 的 BottomNavigationView 组件。我有 4 个菜单项,目前我的 BottomNavigationView 配置如下所示:

<android.support.design.widget.BottomNavigationView
    android:id="@+id/activity_product_details_bottom_navigation_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    app:itemBackground="@color/colorPrimary"
    app:itemIconTint="@color/menu_select_deselect"
    app:itemTextColor="@color/menu_select_deselect"
    app:menu="@menu/menu_product_details"/>
Run Code Online (Sandbox Code Playgroud)

我想要的是所选元素和取消选择的元素的区别颜色。我还创建了名为 menu_select_deselect.xml 的颜色状态列表文件,放置在 res/color 目录中,如下所示

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:color="@color/white" android:state_checked="true"/>
    <item android:color="@color/tint_color_deselected"/>
</selector>
Run Code Online (Sandbox Code Playgroud)

menu_product_details.xml 如下

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item
    android:id="@+id/menu_product_details_home"
    app:showAsAction="ifRoom"
    android:enabled="true"
    android:icon="@drawable/ic_home"
    android:title="@string/menu_product_details_home" />

<item
    android:id="@+id/menu_product_details_product_documents"
    app:showAsAction="ifRoom"
    android:enabled="true"
    android:icon="@drawable/ic_product_documents"
    android:title="@string/menu_product_details_product_documents" />

<item
    android:id="@+id/menu_product_details_product_part_list"
    app:showAsAction="ifRoom"
    android:enabled="true"
    android:icon="@drawable/ic_product_part_list"
    android:title="@string/menu_product_details_product_part_list" />

<item
    android:id="@+id/menu_product_details_product_service"
    app:showAsAction="ifRoom"
    android:enabled="true"
    android:icon="@drawable/ic_product_service"
    android:title="@string/menu_product_details_product_service" />
</menu>
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我解决代码有什么问题,因为即使我单击其他 3 个项目,也只有第一个元素以白色显示?

Kis*_*nki 7

您可以通过添加更改选择/取消选择的图标和文本的色调颜色

app:itemIconTint=""
app:itemTextColor=""
Run Code Online (Sandbox Code Playgroud)

这些是 BottomNavigationView 的 2 个属性,您可以通过在其中添加可绘制选择器在您的 xml 中设置它。

但是,如果您想更改所选项目的图标而不仅仅是颜色,那么我为您提供了不同的解决方案。消除

app:itemIconTint=""
Run Code Online (Sandbox Code Playgroud)

从您的 BottomNavigationView xml 文件中,并将以下行添加到您的类中,其中 BottomNavigationView 可用:

bottomNavigationView.setItemIconTintList(null);
Run Code Online (Sandbox Code Playgroud)

这将禁用所选项目图标的颜色效果并根据您的选择器可绘制更改图标。

我有同样的问题。我添加了可绘制的选择器,用于在选中/选中时更改 BottomNavigationView 项目的图标。每个 item 的选择器 drawable 作为图标添加到 BottomNavigationView 的菜单文件中。


Ram*_*Ram -1

在引用drawable时使用@drawable而不是@color

<android.support.design.widget.BottomNavigationView
    android:id="@+id/activity_product_details_bottom_navigation_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    app:itemBackground="@color/colorPrimary"
    app:itemIconTint="@drawable/menu_select_deselect"
    app:itemTextColor="@drawable/menu_select_deselect"
    app:menu="@menu/menu_product_details"/>
Run Code Online (Sandbox Code Playgroud)