И вы должны использовать это в своем BottomNavigationView:
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
app:itemIconTint="@drawable/bottom_navigation_colors"
app:itemTextColor="@drawable/bottom_navigation_colors"
app:menu="@menu/bottom_navigation_menu" />
Приложение : itemIconTint и app: itemTextColor вместо ColorStateList вместо ColorStateListцвет. Это означает, что вы можете написать селектор для этих цветов, который реагирует на изменения состояния элементов.
Например, у вас может быть bottom_navigation_colors.xml ColorStateList, который содержит:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_checked="true"
android:color="@color/colorPrimary" />
<item
android:state_checked="false"
android:color="@color/grey" />
</selector>
используется Стиль цветных материалов
style="@style/Widget.MaterialComponents.BottomNavigationView.Colored"
Также проверьте эту ссылку: Практические занятия с компонентами материала
Также изменитеЦвет программным способом выглядит следующим образом:
getMenuInflater().inflate(R.menu.menu_home, menu);
Drawable drawable = menu.findItem(R.id.action_clear).getIcon();
drawable = DrawableCompat.wrap(drawable);
DrawableCompat.setTint(drawable, ContextCompat.getColor(this,R.color.textColorPrimary));
menu.findItem(R.id.action_clear).setIcon(drawable);
return true;
Или:
bottomNavigationView.setOnNavigationItemSelectedListener(
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.action_favorites:
//need change color of favotites here.
case R.id.action_schedules:
case R.id.action_music:
}
return true;
}
});