Cambiar el color del texto del elemento de menú en el cajón de navegación

Estoy tratando de añadir un tema de noche para mi aplicación y he perdido casi tres horas sólo tratando de hacer que el texto y los iconos en mi cajón de navegación a su vez blanco junto con el fondo oscuro. Esta es la manera en que estoy tratando de hacer esto en onCreate() en MainActivity.java :

 navigationView = (NavigationView) findViewById(R.id.navigation_view); navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { // This method will trigger onItemClick of navigation menu @Override public boolean onNavigationItemSelected(MenuItem menuItem) { // Checking if the item is in checked state or not, if not make it in checked state if (menuItem.isChecked()) menuItem.setChecked(false); else menuItem.setChecked(true); if (nightMode == 0) { SpannableString spanString = new SpannableString(menuItem.getTitle().toString()); spanString.setSpan(new ForegroundColorSpan(Color.WHITE), 0, spanString.length(), 0); // fix the color to white menuItem.setTitle(spanString); } 

El booleano nightMode es irrelevante porque funciona. Cuando el modo nocturno está activado (0), cualquier elemento de menú seleccionado en el cajón de navegación se vuelve blanco. Sin embargo, eso sólo ocurre cuando se selecciona cada elemento, lo cual es obviamente inconveniente. Aquí está mi drawer_dark.xml:

  <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:checkableBehavior="single"> <item android:id="@+id/unitone" android:checked="true" android:icon="@drawable/one_white" android:title="Classical Period" /> <item android:id="@+id/unittwo" android:checked="false" android:icon="@drawable/two_white" android:title="Postclassical Period" /> <item android:id="@+id/unitthree" android:checked="false" android:icon="@drawable/three_white" android:title="Early Modern Era" /> <item android:id="@+id/unitfour" android:checked="false" android:icon="@drawable/four_white" android:title="Dawn of Industrial Age" /> <item android:id="@+id/unitfive" android:checked="false" android:icon="@drawable/five_white" android:title="Modern Era" /> </group> </menu> 

Estoy usando los iconos blancos en un fondo transparente para cada artículo, con todo aparecen encima como negro en el fondo negro del cajón de la navegación. He intentado buscar una solución xml para cambiar el color del texto y me estoy rascando la cabeza porque no sé por qué se pasó por alto.

¿Puede alguien ofrecerme una solución dinámica para conseguir lo que estoy tratando de lograr? Toda la ayuda es apreciada, gracias!

EDIT: No estoy usando una biblioteca de terceros, es el NavigationView proporcionado en la biblioteca de soporte. Aquí está el diseño XML:

 <android.support.v4.widget.DrawerLayout 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/drawer" android:layout_width="match_parent" android:layout_height="match_parent" android:elevation="7dp" tools:context=".MainActivity" android:fitsSystemWindows="true" > <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <FrameLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/ColorDark" /> <include layout="@layout/toolbar" /> </FrameLayout> <android.support.design.widget.NavigationView android:id="@+id/navigation_view" android:background="#000" android:layout_height="match_parent" android:layout_width="match_parent" android:layout_gravity="start" app:headerLayout="@layout/header" app:menu="@menu/drawer" /> </android.support.v4.widget.DrawerLayout> 

9 Solutions collect form web for “Cambiar el color del texto del elemento de menú en el cajón de navegación”

  <android.support.design.widget.NavigationView android:id="@+id/navigation_view" android:background="#000" android:layout_height="match_parent" android:layout_width="match_parent" android:layout_gravity="start" app:headerLayout="@layout/header" app:itemTextColor="your color" app:menu="@menu/drawer" /> 

Utilice la aplicación: itemIconTint en su NavigationView, ej:

 <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" app:itemTextColor="@color/customColor" app:itemIconTint="@color/customColor" android:fitsSystemWindows="true" app:headerLayout="@layout/nav_header_home" app:menu="@menu/activity_home_drawer" /> 

NavigationView tiene un método llamado setItemTextColor() . Utiliza un ColorStateList .

 // FOR NAVIGATION VIEW ITEM TEXT COLOR int[][] state = new int[][] { new int[] {-android.R.attr.state_enabled}, // disabled new int[] {android.R.attr.state_enabled}, // enabled new int[] {-android.R.attr.state_checked}, // unchecked new int[] { android.R.attr.state_pressed} // pressed }; int[] color = new int[] { Color.WHITE, Color.WHITE, Color.WHITE, Color.WHITE }; ColorStateList csl = new ColorStateList(state, color); // FOR NAVIGATION VIEW ITEM ICON COLOR int[][] states = new int[][] { new int[] {-android.R.attr.state_enabled}, // disabled new int[] {android.R.attr.state_enabled}, // enabled new int[] {-android.R.attr.state_checked}, // unchecked new int[] { android.R.attr.state_pressed} // pressed }; int[] colors = new int[] { Color.WHITE, Color.WHITE, Color.WHITE, Color.WHITE }; ColorStateList csl2 = new ColorStateList(states, colors); 

Aquí es donde obtuve esa respuesta. Y luego justo después de asignar mi NavigationView:

 if (nightMode == 0) { navigationView.setItemTextColor(csl); navigationView.setItemIconTintList(csl2); } 

Utilicé debajo del código para cambiar el color del texto del cajón de navegación en mi aplicación.

 NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); navigationView.setItemTextColor(ColorStateList.valueOf(Color.WHITE)); 

Prueba esto en la clase java

 yourNavigationView.setItemTextColor(new ColorStateList( new int [] [] { new int [] {android.R.attr.state_pressed}, new int [] {android.R.attr.state_focused}, new int [] {} }, new int [] { Color.rgb (255, 128, 192), Color.rgb (100, 200, 192), Color.WHITE } )); 

Mas opciones:

Usted puede también cambiar el título del grupo substituyendo "textColorSecondary"

En tu styles.xml

 <style name="AppTheme.NavigationView"> <item name="android:textColorSecondary">#FFFFFF</item> </style> 

En su diseño

 <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:menu="@menu/activity_main_menu_drawer_drawer" android:theme="@style/AppTheme.NavigationView" app:itemIconTint="@color/colorPrimary" app:itemTextColor="@color/white"/> 

También puede definir un tema personalizado que se deriva de su tema base:

 <android.support.design.widget.NavigationView android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:id="@+id/nav_view" app:headerLayout="@layout/nav_view_header" app:menu="@layout/nav_view_menu" app:theme="@style/MyTheme.NavMenu" /> 

Y luego en su archivo styles.xml:

  <style name="MyTheme.NavMenu" parent="MyTheme.Base"> <item name="android:textColorPrimary">@color/yourcolor</item> </style> 

También puede aplicar más atributos al tema personalizado.

  <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:itemBackground="@drawable/drawer_item_bg" app:headerLayout="@layout/nav_header_home" app:menu="@menu/app_home_drawer" /> 

Para establecer el fondo del elemento mediante la aplicación: itemBackground

Drawer_item_bg.xml

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle" > <solid android:color="@android:color/transparent" /> </shape> </item> <item android:top="-2dp" android:right="-2dp" android:left="-2dp"> <shape> <padding android:bottom="0dp" android:left="15dp" android:right="0dp" android:top="0dp"/> <solid android:color="@android:color/transparent" /> <stroke android:width="0.5dp" android:color="#CACACA" /> </shape> </item> </layer-list> 

En el futuro si alguien viene aquí usando, la actividad del cajón de la navegación (proporcionada por el estudio en ventana de la impulsión de la actividad)

La respuesta es –

Utilice esto antes de OnCreate () en MainActivity

 int[][] state = new int[][] { new int[] {android.R.attr.state_checked}, // checked new int[] {-android.R.attr.state_checked} }; int[] color = new int[] { Color.rgb(255,46,84), (Color.BLACK) }; ColorStateList csl = new ColorStateList(state, color); int[][] state2 = new int[][] { new int[] {android.R.attr.state_checked}, // checked new int[] {-android.R.attr.state_checked} }; int[] color2 = new int[] { Color.rgb(255,46,84), (Color.GRAY) }; ColorStateList csl2 = new ColorStateList(state2, color2); 

Y usar esto en onNavigationItemSelected () en MainActivity (no necesita escribir esta función si utiliza la actividad de Gaveta de Navegación, se agregará en MainActivity).

  NavigationView nav = (NavigationView) findViewById(R.id.nav_view); nav.setItemTextColor(csl); nav.setItemIconTintList(csl2); nav.setItemBackgroundResource(R.color.white); 

Sugerencia: agregue este código antes Si else Condición en onNavigationItemSelected ()

  • ¿Cómo puedo hacer que el texto de TextView sea de dos tamaños diferentes?
  • Android cómo configurar la opacidad en bitmap xml
  • "Error: Duplicar recursos" mientras se construye Android Studio Project?
  • Simple Xml - orden de elementos no conservados?
  • Diseño de Android: apila dos TextViews verticalmente, dentro de una fila ListView
  • Error Unparsed Aapt
  • Activos de Android - FileNotFound
  • Android scrollview quitar la luz azul
  • Android: idioma predeterminado de strings.xml
  • Análisis de un XML HttpResponse
  • InvocationTargetException sobre inflar un xml - android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.