如何在底部导航中更改非活动颜色?

Har*_*nto 18 navigation android android-layout android-studio

我无法在底部导航中更改非活动颜色

在此输入图像描述

这是我的xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:id="@+id/home_item"
    android:icon="@drawable/ic_home"
    android:color="#FFFFFF"
    android:tint="#FFFFFF"
    android:backgroundTint="#FFFFFF"
    android:title="Home"
    />
<item
    android:id="@+id/setting_item"
    android:icon="@drawable/ic_setting"
    android:color="#FFFFFF"
    android:tint="#FFFFFF"
    android:backgroundTint="#FFFFFF"
    android:title="Setting"
    />
Run Code Online (Sandbox Code Playgroud)

这是我的java

bottomBar.getBar().setBackgroundColor(getResources().getColor(R.color.bottom_tabs));
bottomBar.setActiveTabColor("#FFFFFE");
Run Code Online (Sandbox Code Playgroud)

谁有人可以帮忙?

chr*_*sli 51

如果您使用BottomNavigationView,解决方案可能很简单.您只需要将选择器创建为ColorStateList,然后将选择器分配给BottomNavigationView的"itemIconTint"属性.

例如:

bottom_nav_icon_color_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:color="@android:color/white" />
    <item android:state_pressed="true" android:state_enabled="true" android:color="@android:color/white" />
    <item android:color="@color/InactiveBottomNavIconColor" />
</selector>
Run Code Online (Sandbox Code Playgroud)

BotttomNavigationview.xml

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

  • @ color/bottom_nav_icon_color_selector不正确.这个文件是可绘的! (6认同)
  • @BoshRa将其放在“ res / color”中,而不是在“ res / drawable”中,那么您就可以使用“ @ color / bottom_nav_icon_color_selector”来引用它 (4认同)

Wir*_*ing 5

Chrislis 的回答是一个好的开始。但是我喜欢通过样式和主题来解决这个问题。我还在这个例子中使用了新材料BottomNavigationView

在color文件夹下新建一个文件,例如: bottom_nav_item_color.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/item_color_active" android:state_checked="true"/>
    <item android:color="@color/item_color_inactive"/>
</selector>
Run Code Online (Sandbox Code Playgroud)

将此行添加到位于 themes.xml

<item name="bottomNavigationStyle">@style/BottomNavigationViewStyle</item>
Run Code Online (Sandbox Code Playgroud)

将此代码添加到 styles.xml

<style name="BottomNavigationViewStyle" parent="Widget.MaterialComponents.BottomNavigationView.Colored">
    <item name="android:background">@color/my_background_color</item>
    <item name="itemTextColor">@color/bottom_nav_item_color</item>
    <item name="itemIconTint">@color/bottom_nav_item_color</item>
</style>
Run Code Online (Sandbox Code Playgroud)

现在应该正确设置 BottomNavigationView 的样式

示例布局文件

<com.google.android.material.bottomnavigation.BottomNavigationView
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schema.android.com/apk/res/res-auto"
     android:id="@+id/navigation"
     android:layout_width="match_parent"
     android:layout_height="56dp"
     android:layout_gravity="start"
     app:menu="@menu/my_navigation_items" />
Run Code Online (Sandbox Code Playgroud)