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
NavigationView
estás usandoAquí, en lugar de usar
@color/black
o@color/primary_test
, use unColor State List Resource
. Para eso, primero cree un nuevo directorioxml
interno (por ejemplo, drawer_item.xml)color
(que debería estar dentro delres
directorio). Si aún no tiene un directorio nombradocolor
, cree uno.Ahora adentro
drawer_item.xml
haz algo como estoEl último paso sería cambiar tu
NavigationView
Como 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
xml
o programáticamente), el elemento en particular tendrá un color diferente al de los no seleccionados.fuente
Creo que
app:itemBackground
espera un dibujable. Así que sigue los pasos a continuación:Haga un archivo dibujable
highlight_color.xml
con el siguiente contenido:Cree otro archivo dibujable
nav_item_drawable.xml
con el siguiente contenido:Finalmente agregue la
app:itemBackground
etiqueta 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.xml
el NavigationView de esta manera:ahora aplique este ThemeOverlay al
app:theme
atributo 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 manejosetOnCheckedChangeListener
solo para resaltar el color.Es necesario establecer la
NavigateItem
casilla de verificación verdadera siempre queNavigateView
se haga clic en un elemento.Añadir
NavigationItemSelectedListener
elNavigationView
fuente
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)
elView
color 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 enDrawerLayout
oNavigationView
y 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:itemTextColor
dentro delNavigationView
widget para seleccionar el color del texto.Paso 3:
Por alguna razón, cuando presiona un elemento del
NavigationView
menú, 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:iconTint
atributo en losNavigationView
elementos del menú y establezca el mismo selector.Resultado:
fuente