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

Intento agregar un tema nocturno para mi aplicación y he desperdiciado casi tres horas tratando de hacer que el texto y los íconos en el cajón de navegación se vuelvan blancos junto con el fondo oscuro. Esta es la forma en que trato 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 modo nightMode booleano es irrelevante porque funciona. Cuando el modo nocturno está activado (0), cualquier elemento del menú que esté seleccionado en el cajón de navegación se vuelve blanco. Sin embargo, eso solo ocurre cuando se selecciona cada elemento, lo cual es obviamente inconveniente. Aquí está mi drawer_dark.xml:

            

Estoy usando icons blancos sobre un fondo transparente para cada elemento, pero aparecen en negro sobre el fondo negro del panel de navegación. Intenté 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.

¿Alguien puede ofrecerme una solución dinámica para obtener lo que estoy tratando de lograr? Toda ayuda es apreciada, ¡gracias!

EDITAR: no estoy usando una biblioteca de terceros, es la NavigationView proporcionada en la biblioteca de soporte. Aquí está el diseño XML:

        

   

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

  

NavigationView tiene un método llamado setItemTextColor() . Utiliza una 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); } 

Mas opciones:

también puede cambiar el título del grupo anulando “textColorSecondary”

En tu styles.xml

  

En tu diseño

  

Utilicé el código siguiente 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 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 } )); 

agregar aplicación: itemTextColor = “# fff” en su NavigationView como

   

También puede definir un tema personalizado derivado de su tema base:

  

y luego en su archivo styles.xml:

   

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

En Futuro si alguien viene aquí usando la Actividad del Cajón de navegación (proporcionada por Studio en la ventana Prompt de actividad)

La respuesta es –

Use 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 use esto en onNavigationItemSelected () en MainActivity (no necesita escribir esta función si usa la actividad de Cajón 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 If else Condición en onNavigationItemSelected ()

   

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

drawer_item_bg.xml

               

itemIconTint, si desea cambiar el color del icono

 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:itemTextColor="@color/colorPrimary" app:itemIconTint="@color/colorPrimary" app:headerLayout="@layout/nav_header_main" app:menu="@menu/activity_main_drawer" /> 

Esto funciona para mí en lugar de customTheme puedes poner tu tema en estilos. en este código también puede cambiar la fuente y el tamaño del texto.

   

aquí está mi vista de navegación