studio para desplegable create contextual context android xml menu

para - popup menu android



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

En el futuro, si alguien viene aquí usando, Actividad del cajón de navegación (proporcionada por Studio en la ventana de Indicador 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 del 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 de la condición If else en onNavigationItemSelected ()

Estoy tratando de agregar un tema nocturno para mi aplicación y he perdido casi tres horas tratando de hacer que el texto y los íconos en mi cajón de navegación se vuelvan blancos junto con el fondo oscuro. Esta es la forma 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 del menú seleccionado en el cajón de navegación se vuelve blanco. Sin embargo, eso solo ocurre cuando se selecciona cada elemento, lo que obviamente es 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 iconos blancos sobre un fondo transparente para cada elemento, pero se muestran como negros en el fondo negro del cajón de navegación. Intenté buscar una solución xml para cambiar el color del texto y me rasco 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 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>


Esto funciona para mi. 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.

<style name="MyTheme.NavMenu" parent="CustomTheme"> <item name="android:textSize">16sp</item> <item name="android:fontFamily">@font/ssp_semi_bold</item> <item name="android:textColorPrimary">@color/yourcolor</item> </style>

aquí está mi vista de navegación

<android.support.design.widget.NavigationView android:id="@+id/navigation_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:theme="@style/MyTheme.NavMenu" app:headerLayout="@layout/nav_header_main" app:menu="@menu/activity_main_drawer"> <include layout="@layout/layout_update_available"/> </android.support.design.widget.NavigationView>


Esto puede ayudar Funcionó para mí

Vaya a actividad_ "nombre de actividad de navegación" .xml Dentro de NavigationView inserte este código

app:itemTextColor="color of your choice"


Mas opciones:

También puede cambiar el título del grupo anulando "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"/>


Puede hacerlo simplemente agregando su tema a su Vista de navegación.

<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" android:background="@color/colorPrimary" android:theme="@style/AppTheme.NavigationView" app:headerLayout="@layout/nav_header_drawer" app:menu="@menu/activity_drawer_drawer"/>

y en su archivo style.xml, agregará este tema

<style name="AppTheme.NavigationView" > <item name="colorPrimary">@color/text_color_changed_onClick</item> <item name="android:textColorPrimary">@color/Your_default_text_color</item> </style>


Puedes usar drawables en

aplicación: itemTextColor aplicación: itemIconTint

entonces puedes controlar el estado verificado y el estado normal usando un extraíble

<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:itemHorizontalPadding="@dimen/margin_30" app:itemIconTint="@drawable/drawer_item_color" app:itemTextColor="@drawable/drawer_item_color" android:theme="@style/NavigationView" app:headerLayout="@layout/nav_header" app:menu="@menu/drawer_menu">

drawer_item_color.xml

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="@color/selectedColor" android:state_checked="true" /> <item android:color="@color/normalColor" /> </selector>


También puede definir un tema personalizado derivado 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.


Use app: 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" />


Utilicé el siguiente 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));


agregue la aplicación: itemTextColor = "# fff" en su NavigationView como

<android.support.design.widget.NavigationView android:layout_width="wrap_content" android:layout_height="match_parent" app:menu="@menu/slider_menu" android:background="@color/colorAccent" app:itemTextColor="#fff" android:id="@+id/navigation_view" android:layout_gravity="start"/>


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" />


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 } ));


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);

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

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


<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 usando 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>


<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" />