Estoy usando la nueva biblioteca de compatibilidad con diseño de Android para implementar un cajón de navegación en mi aplicación.
¡No sé cómo cambiar el color de un artículo seleccionado!
Aquí está el xml del menú:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/navigation_item_1"
android:icon="@drawable/ic_1"
android:title="@string/navigation_item_1"/>
<item
android:id="@+id/navigation_item_2"
android:icon="@drawable/ic_2"
android:title="@string/navigation_item_2"/>
</group>
Y aquí está el xml de navigationview que se coloca dentro de un android.support.v4.widget.DrawerLayout:
<android.support.design.widget.NavigationView
android:id="@+id/activity_main_navigationview"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/drawer_header"
app:itemIconTint="@color/black"
app:itemTextColor="@color/primary_text"
app:menu="@menu/menu_drawer">
<TextView
android:id="@+id/main_activity_version"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:textColor="@color/primary_text" />
</android.support.design.widget.NavigationView>
Gracias por tu ayuda !
[EDITAR] Ya he visto soluciones como esta: Cambiar el color de fondo del menú de Android .
Parece ser un gran truco y pensé que con la nueva Biblioteca de soporte de diseño, ¿se habría introducido algo más limpio?

Respuestas:
Bueno, puedes lograr esto usando Color State Resource . Si notas dentro de tu
NavigationViewestás usandoAquí, en lugar de usar
@color/blacko@color/primary_test, use unColor State List Resource. Para eso, primero cree un nuevo directorioxmlinterno (por ejemplo, drawer_item.xml)color(que debería estar dentro delresdirectorio). Si aún no tiene un directorio nombradocolor, cree uno.Ahora adentro
drawer_item.xmlhaz algo como estoEl último paso sería cambiar tu
NavigationViewComo no se puede utilizar de lista de recursos estado de color separados para
IconTint,ItemTextColor,ItemBackground.Ahora, cuando configura un elemento como marcado (ya sea en
xmlo programáticamente), el elemento en particular tendrá un color diferente al de los no seleccionados.fuente
Creo que
app:itemBackgroundespera un dibujable. Así que sigue los pasos a continuación:Haga un archivo dibujable
highlight_color.xmlcon el siguiente contenido:Cree otro archivo dibujable
nav_item_drawable.xmlcon el siguiente contenido:Finalmente agregue la
app:itemBackgroundetiqueta en NavView:aquí, el archivo highlight_color.xml define un color sólido que se puede dibujar para el fondo. Posteriormente, este color dibujable se asigna al selector nav_item_drawable.xml.
Esto funcionó para mí. Ojalá esto ayude.
******************************************** ACTUALIZADO *** *****************************************
Aunque la respuesta mencionada anteriormente le brinda un control preciso sobre algunas propiedades, la forma en que estoy a punto de describir se siente más SÓLIDA y es un poco MÁS FRÍA .
Entonces, lo que puede hacer es definir un ThemeOverlay en
styles.xmlel NavigationView de esta manera:ahora aplique este ThemeOverlay al
app:themeatributo de NavigationView, así:Espero que esto sea de ayuda.
fuente
android:background="@drawable/nav_item_drawable"para otros widgets como RadioButton, Checkbox, Button, etc. Reduce la programación de bloatware para su manejosetOnCheckedChangeListenersolo para resaltar el color.Es necesario establecer la
NavigateItemcasilla de verificación verdadera siempre queNavigateViewse haga clic en un elemento.Añadir
NavigationItemSelectedListenerelNavigationViewfuente
setChecked(true)). Puedo ver que cambia el color del elemento marcado, pero no puedo modificarlo yo mismo, el color siempre es una versión más clara del fondo de la vista de navegación.setChecked(true)elViewcolor de fondo cambia hasta que el tema dispositivo que utiliza. Si desea cambiar el fondo del elemento a otro color, debe inflar su diseño enDrawerLayoutoNavigationViewy manejarlo usted mismo.Esta es otra forma de lograr esto:
}
fuente
Así es como puede hacerlo en el método onCreate de su actividad:
fuente
Paso 1: cree un selector marcado / no marcado:
selector.xml
Paso 2: use el atributo xml
app:itemTextColordentro delNavigationViewwidget para seleccionar el color del texto.Paso 3:
Por alguna razón, cuando presiona un elemento del
NavigationViewmenú, no lo considera una verificación de botón. Por lo tanto, debe verificar manualmente el elemento seleccionado y borrar el elemento seleccionado anteriormente. Utilice el siguiente oyente para hacer esoPaso 4:
Para cambiar el color del icono, use el
app:iconTintatributo en losNavigationViewelementos del menú y establezca el mismo selector.Resultado:
fuente