Пользовательские значки - вид снизу навигации
У меня есть BottomNavigationView и я хочу иметь пользовательские значки как для выбранного, так и для невыбранного состояния. Попробовал использовать селектор, но он не работает.
Есть идеи, как разместить собственные иконки?
1 ответ
Вы можете просто создать настраиваемый селектор в папке с возможностью рисования, а изображение можно изменить в соответствии с состоянием виджета, используемого в представлении
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/home_active" android:state_checked="true"/>
<item android:drawable="@drawable/home_inactive" android:state_checked="false"/>
и установите этот селектор в нижнем файле навигационного меню
<item
android:id="@+id/navigation_home"
android:icon="@drawable/nav_home_selector"
android:title="@string/tab_home_title" />
Обязательно добавьте эту строку в свой файл java. Это решение не будет работать для выбранного значка, если вы не добавите эту строку.
bottomNavigationView.setItemIconTintList(null);
Это отключит эффект оттенка значка выбранного элемента.
BottomNavigationView
получит свои значки из файла меню, поэтому вы не сможете установить их из вашего селектора. Однако, если вы хотите изменить их цвет для выбранных и не выбранных состояний, вы можете сделать это, как показано ниже.
Создайте свой селектор drawable nav_item_color_state, как показано ниже
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/white" android:state_enabled="true" />
<item android:color="@color/colorPrimary" android:state_enabled="false" />
</selector>
задавать itemIconTint
а также itemTextColor
используя селектор рисования, как показано ниже, и он будет менять цвет вашего значка и текста при выборе.
<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:itemIconTint="@drawable/nav_item_color_state"
app:itemTextColor="@drawable/nav_item_color_state"
app:menu="@menu/bottom_navigation_main" />
Проверьте документацию здесь
По какой-то причине "state_enabled" в моем случае не работал, поэтому я использовал селектор, указанный ниже.nav_color_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/black" android:state_checked="true" />
<item android:color="@color/grey" android:state_checked="false" />
</selector>
Наряду с BottomNavigationView как
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/nav_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
app:itemIconTint="@drawable/nav_color_selector"
app:itemTextColor="@drawable/nav_color_selector"
android:background="?android:attr/windowBackground"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/bottom_nav_menu" />
Этот код изменил цвет заливки векторных чертежей, которые я связал в bottom_nav_menu.xml