Выбранный элемент в BottomNavigationView имеет тот же цвет, что и фон

Я реализую нижнее меню навигации. но первый пункт в меню не выбран. Я заметил, что когда я меняю цвет фона панели, он отображается, и причина в том, что цвет первого элемента «включен» совпадает с цветом фона моей панели навигации. Как я могу изменить цвета включенной вкладки, а также остальных элементов. По умолчанию они черные... допустим, я хочу изменить их на белые. Благодаря изображению основной деятельности. XML-файл меню http://pctechtips.org/apps/activity.png

<?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)


Вам нужно сделать селектор для нижнего навигационного представления, вот пример (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>

затем добавьте коды ниже в нижний вид навигации

приложение:itemIconTint="@drawable/nav_item_color_state" приложение:itemTextColor="@drawable/nav_item_color_state"

person Erwin Kurniawan A    schedule 30.11.2019

Цвет выбранных/не выбранных значков и меток определяется атрибутами app:itemIconTint и app: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>

Проверьте, совпадают ли по какой-то причине цвета colorOnSurface и colorPrimary с фоном вашего 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.

person Gabriele Mariotti    schedule 30.11.2019
comment
Очень четкий ответ о том, как это сделать с помощью тем. - person Richard; 02.12.2020
comment
Хотите знать, можно ли это также переопределить в теме приложения? - person David; 26.02.2021