tutorial - navigationview android
¿Cómo diseñar el NavigationView de la biblioteca de Design Support? (2)
He respondido a una pregunta similar Here .
Básicamente, lo que necesita hacer es usar un Color State List Resource
. Para eso, primero cree un nuevo xml
(por ejemplo, drawer_item.xml) dentro del directorio de color
(que debería estar dentro del directorio res
). Si aún no tiene un directorio llamado color, cree uno.
Ahora dentro de drawer_item.xml
haz algo como esto
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="checked state color" android:state_checked= "true" />
<item android:color="your default color" />
</selector>
Para itemBackground
, también se debe itemBackground
un itemBackground
separado dentro de la carpeta de dibujo. El nombre es el mismo drawer_item
. android:drawable
propiedad itemBackground
debe establecer en lugar de android:color
para itemBackground
:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/shape_rectangle_checked"
android:state_checked= "true" />
<item android:drawable="@drawable/shape_rectangle" />
</selector>
Archivo shape_rectangle
:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#ffffff" /> <!--white color -->
</shape>
Archivo shape_rectangle_checked
:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#25aaf1" /> <!--blue color -->
</shape>
y luego establecer en su navegación como esta
app:itemIconTint="@color/drawer_item" //notice here
app:itemTextColor="@color/drawer_item" //and here
app:itemBackground="@drawable/drawer_item"//and here for changing the background color of the item which is checked
Así que estoy usando el NavigationView proporcionado por la biblioteca de soporte de diseño de Android
Parece que no puedo encontrar ejemplos sobre cómo diseñarlo.
Hasta ahora tengo:
<android.support.design.widget.NavigationView
android:id="@+id/navigation_view"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_gravity="start"
app:headerLayout="@layout/header"
app:menu="@menu/drawer"
app:itemTextColor="@color/black"
app:itemIconTint="@color/black"/>
Diseñar el encabezado es fácil, ya que está bajo su propio diseño XML, pero el cuerpo es un archivo de recursos de menú y no un diseño.
-
app:itemTextColor
cambia el color del texto -
app:itemIconTint
cambia el color del icono -
app:itemBackground
cambia el color de fondo del elemento
Entonces, ¿cómo establecer
- fondo del elemento seleccionado
- color del texto del elemento seleccionado
- icono seleccionado elemento tinte
Para expandir la respuesta de @ Sash_KP, para el xml
en la carpeta de drawable
, no necesita el @drawable/shape_rectangle
y @drawable/shape_rectangle_check
. Puedes usar @color/your_color
.
También para API >= 21
, he notado que los elementos del menú de navegación tienen un selector predeterminado. Notará que si toca y mantiene presionado el elemento del menú, aparecerá una onda. El uso de un itemBackground
personalizado no anulará la ondulación predeterminada. Por lo tanto, si usas un ripple drawable
, se crearán dos rizos. Además, los elementos del menú con los ripple drawables
no le permiten tener un estado presionado por algún motivo (el rizo predeterminado solo aparecerá si mantiene presionado).
Así que para API >= 21
no recomendaría el uso de un ripple drawable
. Simplemente use un selector drawable
regular sin ondulaciones personalizadas.