BottomNavigationView 中被选中的项与背景颜色相同

3
我正在实现底部导航菜单,但是菜单中的第一项没有被选中。我注意到当我更改了bar背景颜色时它才显示,原因是第一项“启用”状态的颜色与我的导航栏背景颜色相同。如何更改已启用选项卡和其余项目的颜色。默认情况下它们是黑色...假设我想将它们更改为白色。谢谢 主要活动的图像。 http://pctechtips.org/apps/activity.png 菜单xml文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/navigation_home"
        android:icon="@drawable/ic_home_black_24dp"
        android:title="@string/title_home" />

    <item
        android:id="@+id/navigation_dashboard"
        android:icon="@drawable/ic_dashboard_black_24dp"
        android:title="@string/title_dashboard" />

    <item
        android:id="@+id/navigation_notifications"
        android:icon="@drawable/ic_notifications_black_24dp"
        android:title="@string/title_notifications" />
</menu>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <org.techgeorge.textrecon.PaintView
        android:id="@+id/paintView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottom_navigation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:layout_alignParentBottom="true"
        android:background="@color/colorPrimary"
        app:menu="@menu/bottom_nav_menu" />

</RelativeLayout>
2个回答

11

app:itemIconTintapp:itemTextColor 属性使用选择器定义了选中/未选中图标和标签的颜色。默认的 BottomNavigationView 样式使用此选择器来对图标和标签进行着色:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:alpha="1.0" android:color="?attr/colorPrimary" android:state_checked="true"/>
  <item android:alpha="0.6" android:color="?attr/colorOnSurface"/>
</selector>

检查一下是否由于某些原因,colorOnSurfacecolorPrimary颜色与你的BottomNavigationView背景颜色相同。

在不定义新选择器的情况下,您仍然可以覆盖这些颜色。只需使用android:theme属性:

  <com.google.android.material.bottomnavigation.BottomNavigationView
      android:theme="@style/ThemeOverlay.BottomNavView"
      ../>

使用:

  <style name="ThemeOverlay.BottomNavView" parent="">
    <item name="colorPrimary">@color/secondaryDarkColor</item>
    <item name="colorOnSurface">@color/colorAccent</item>
  </style>

您还可以使用带有 materialThemeOverlay 属性的自定义样式:

  <style name="MyWidget.MaterialComponents.BottomNavigationView" parent="Widget.MaterialComponents.BottomNavigationView">
    <item name="materialThemeOverlay">@style/ThemeOverlay.BottomNavView</item>
  </style>

带着:

  <com.google.android.material.bottomnavigation.BottomNavigationView
      style="@style/MyWidget.MaterialComponents.BottomNavigationView"
      ../>

这个最后的属性需要库的版本1.1.0


1
通过主题化非常清晰地解释了如何做到这一点。 - Richard
想知道这个是否也可以在应用程序的主题中被覆盖? - David

9

你需要为底部导航栏创建可绘制选择器,这里是示例(nav_item_color_state.xml)

<?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/darker_gray" android:state_checked="false" />
</selector>

请在底部导航视图中添加以下代码:

app:itemIconTint="@drawable/nav_item_color_state" app:itemTextColor="@drawable/nav_item_color_state"

此代码与底部导航项的颜色有关。

谢谢,这真的很有帮助。 - King Of The Jungle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接