Цвет выбранной вкладки в Нижнем навигационном представлении
Я добавить BottomNavigationView
к проекту, и я хотел бы иметь другой цвет текста (и оттенок значка) для выбранной вкладки (для достижения эффекта серых выделенных вкладок). Использование другого цвета с android:state_selected="true"
в файле ресурсов селектора цвета, похоже, не работает. Я также попытался иметь дополнительные записи элементов с android:state_focused="true"
или android:state_enabled="true"
, к сожалению, никакого эффекта. Также попробовал установить state_selected
атрибут false (явно) для цвета по умолчанию (не выбранного), без удача.
вот как я добавляю вид в мой макет:
<android.support.design.widget.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
app:itemBackground="@color/silver"
app:itemIconTint="@color/bnv_tab_item_foreground"
app:itemTextColor="@color/bnv_tab_item_foreground"
app:menu="@menu/bottom_nav_bar_menu" />
вот мой выбор цвета (bnv_tab_item_foreground.xml
):
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@android:color/darker_gray" />
<item android:state_selected="true" android:color="@android:color/holo_blue_dark" />
</selector>
и мой ресурс меню (bottom_nav_bar_menu.xml
):
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_home"
android:icon="@drawable/ic_local_taxi_black_24dp"
android:title="@string/home" />
<item
android:id="@+id/action_rides"
android:icon="@drawable/ic_local_airport_black_24dp"
android:title="@string/rides"/>
<item
android:id="@+id/action_cafes"
android:icon="@drawable/ic_local_cafe_black_24dp"
android:title="@string/cafes"/>
<item
android:id="@+id/action_hotels"
android:icon="@drawable/ic_local_hotel_black_24dp"
android:title="@string/hotels"/>
</menu>
я был бы признателен за любую помощь.
4 ответа:
при оформлении
selector
, всегда сохраняйте состояние по умолчанию в конце, иначе будет использоваться только состояние по умолчанию. Вам нужно изменить порядок элементов в селекторе, как:<?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/holo_blue_dark" /> <item android:color="@android:color/darker_gray" /> </selector>
и состояние, которое будет использоваться с
BottomNavigationBar
иstate_checked
неstate_selected
.
1. внутри res создать папку с именем color (например, drawable)
2. Правой Кнопкой Мыши на папке color. Выбирать создать - > файл ресурсов цвета - > создать цвет.xml-файл (bnv_tab_item_foreground) (Рисунок 1: Структура Файлов)
3. копировать и вставлять bnv_tab_item_foreground
<android.support.design.widget.BottomNavigationView android:id="@+id/navigation" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginEnd="0dp" android:layout_marginStart="0dp" app:itemBackground="@color/appcolor"//diffrent color app:itemIconTint="@color/bnv_tab_item_foreground" //inside folder 2 diff colors app:itemTextColor="@color/bnv_tab_item_foreground" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:menu="@menu/navigation" />
bnv_tab_item_foreground:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:color="@color/white" /> <item android:color="@android:color/darker_gray" /> </selector>
Рисунок 1: Файл Структура:
попробуйте использовать
android:state_enabled
, а неandroid:state_selected
для атрибутов элемента селектора.
BottomNavigationView
использует colorPrimary из темы, примененной для выбранной вкладки. Таким образом, вы можете создать стиль с предпочтительным основным цветом и установить его в качестве темы для вашегоBottomNavigationView
в xml-файле макета.стили.xml:
<style name="BottomNavigationTheme" parent="Theme.AppCompat.Light"> <item name="colorPrimary">@color/active_tab_color</item> </style>
your_layout.xml:
<android.support.design.widget.BottomNavigationView android:id="@+id/navigation" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?android:attr/windowBackground" android:theme="@style/BottomNavigationTheme" app:menu="@menu/navigation" />