2

Я следую этой цветовой схеме навигации. enter image description hereНавигация Переключатели просмотра ведут себя некорректно

Я создал 3 селектора, для фона, текста и значка. Когда я установил селекторы, на мой взгляд навигации выглядит следующим образом: enter image description here

Проблема заключается в том, что ни один элемент не выбран и показан, если нажать один элемент, цвет фона меняется все элементы серым. Значок никогда не получает основной цвет.

Здесь есть являются XMLs:

<android.support.design.widget.NavigationView 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:layout_gravity="start" 
      android:background="@android:color/white" 
      app:itemTextColor="@drawable/nav_item_text" 
      app:itemIconTint="@drawable/nav_item_icon_tint" 
      app:itemBackground="@drawable/nav_item_background" 
      app:headerLayout="@layout/drawer_student_data_header" 
      app:menu="@menu/drawer" 
      android:id="@+id/navigationView"/> 

nav_item_icon_tint.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:color="@color/gray_600"/> 
    <item android:state_selected="true" android:color="@color/primary" /> 
    <item android:color="@color/gray_600" /> 
</selector> 

nav_item_text.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:color="@color/black_87_percent"/> 
    <item android:state_selected="true" android:color="@color/primary" /> 
    <item android:color="@color/black_87_percent" /> 
</selector> 

nav_item_background.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:drawable="@color/gray_400"/> 
    <item android:state_selected="true" android:drawable="@color/gray_200" /> 
    <item android:drawable="@android:color/white" /> 
</selector> 

ответ

1

У меня была аналогичная проблема и, похоже, способ решить ее - использовать android:state_checked вместо android:state_selected во всех трех селекторах (по крайней мере, это разрешило это для меня).

0

Вы можете использовать setItemTextColor и setItemIconTintList для набора текст цветового оттенка и цвета значка оттенка к пункту NavigationDrawer,

Чтобы использовать эти методы добавить этот код в конце onCreateView:

int[][] states = new int[][]{ 
     new int[]{-android.R.attr.state_checked},// unchecked state 
     new int[]{android.R.attr.state_checked}, // checked state 
}; 

int[] colors = new int[]{ 
     ContextCompat.getColor(this, R.color.colorPrimary), 
     ContextCompat.getColor(this, R.color.colorPrimaryDark) 
}; 

ColorStateList colorStateList = new ColorStateList(states, colors); 
navigationView.setItemTextColor(colorStateList); 
navigationView.setItemIconTintList(colorStateList); 

Этого код наборе цвет для неконтролируемого состояния и состояние проверки. Вы можете установить цвет в другие состояния.

Цветная матрица и массив состояний должны иметь равные члены. Вы можете выбрать цвет, какой хотите. Вы можете использовать класс Color или использовать ресурс для использования образца. В этой ссылке вы можете найти список доступных состояний developer.android.

0

Убедитесь, что вы не получаете доступ к пункту меню из нижней навигации и дважды устанавливаете его состояние на «проверено». Чтобы избежать этого, используйте:

mBottomNavigationView.selectedItemId(R.id.your_menu_item_id); 

вместо

mBottomNavigationView.menu.getItem(position).setChecked(true);