¿Cómo puedo añadir un elemento personalizado a un NavigationView con un diseño de menú?
He estado experimentando con la simplificación de algunos códigos de cajón de navegación mediante el uso de la nueva clase NavigationView
en la biblioteca de soporte de diseño de Android. Funciona muy bien si sólo quieres iconos a la izquierda, y el texto a la derecha como en el ejemplo de la documentación. Por ejemplo, si uso este diseño de menú:
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:id="@+id/group1" android:checkableBehavior="single"> <item android:id="@+id/nav_screen1" android:icon="@drawable/ic_list_black_24dp" android:title="Screen 1" /> <item android:id="@+id/nav_screen2" android:icon="@drawable/ic_search_black_24dp" android:title="Screen2"/> <item android:id="@+id/nav_screen3" android:icon="@drawable/ic_equalizer_black_24dp" android:title="Screen 3"/> </group> <group android:id="@+id/group2"> <item android:id="@+id/nav_settings" android:icon="@drawable/ic_settings_black_24dp" android:title="Settings"/> </group> </menu>
El problema es que quiero agregar una sola vista personalizada al diseño que tenga un android.support.v7.widget.SwitchCompat
como en la aplicación Google Play Movies (vea la captura de pantalla a continuación). Idealmente, me gustaría agregar la vista personalizada mientras uso mi diseño de menú, pero si eso no es posible sin usar un hack crudo (como hacer uso de un diseño existente generado por la biblioteca de soporte), entonces me gustaría saber el Solución con la menor cantidad de código, y que todavía hace que valga la pena la transición a NavigationView
.
- Cómo agregar un grupo al cajón de navegación mediante programación
- Icono de Android ic_drawer.png en color blanco?
- Cajón de navegación para múltiples actividades
- Elemento en negrita después de la selección
- NavigationDrawer desactivar el desplazamiento a la derecha
He intentado usar el atributo actionLayout
para especificar un archivo de diseño personalizado como este:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.SwitchCompat android:layout_width="fill_parent" android:layout_height="match_parent" android:text="@string/night_mode"/> </LinearLayout>
Sin embargo, ese atributo parecía ser ignorado ya que no funcionaba.
Para referencia, he aquí una captura de pantalla del cajón de navegación de Google Play Movies:
La aplicación de gmail también tiene vistas personalizadas para mostrar el número de cuentas correspondientes a las etiquetas.
- Detección del estado de la aplicación de currículum de diferentes android estado de navegación
- Dos cajones de navegación en la misma actividad
- ActionBarDrawerToggle no está configurando el Indicador de cajón
- Android Navigation Drawer (actividades de llamada) con AbstractMainActivity
- Android: cajón de navegación sin xml
- ¿Cómo mostrar la imagen de perfil de Facebook en el cajón de navegación android?
- Cómo mostrar / ocultar el cajón de navegación mediante programación
- Icono de gavetas de navegación en la parte superior derecha muestra Icono de flecha trasero insted de icono de hamburguesa
Esto ahora es posible en Android Support Library 23.1 usando el atributo actionLayout
:
NavigationView proporciona una forma conveniente de crear un cajón de navegación, incluida la posibilidad de crear elementos de menú mediante un archivo XML de menú. Hemos ampliado la funcionalidad posible con la posibilidad de configurar vistas personalizadas para los elementos mediante la aplicación: actionLayout o usando MenuItemCompat.setActionView ().
NavigationView
es una subclase de FrameLayout
, que puede tener varios hijos:
Sin embargo, puede agregar varios hijos a un FrameLayout y controlar su posición dentro del FrameLayout asignando gravedad a cada niño, utilizando el atributo android: layout_gravity.
Esto significa que puede agregar una vista personalizada a su NavigationView
:
<android.support.design.widget.NavigationView android:layout_height="match_parent" android:layout_width="wrap_content" android:layout_gravity="start" android:fitsSystemWindows="true" app:menu="@menu/side_menu"> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="200dp" android:layout_gravity="bottom"> <android.support.v7.widget.SwitchCompat android:layout_width="match_parent" android:layout_height="match_parent" android:text="night_mode"/> </LinearLayout> </android.support.design.widget.NavigationView>
Crear un diseño con switchcompat y mencionarlo en el elemento de menú como
<item android:id="@+id/notification" android:title="Notification" app:actionLayout="@layout/notify" />`
A continuación, notificar el diseño añadir esto
<android.support.v7.widget.SwitchCompat android:id="@+id/switch_compat" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:checked="false" android:onClick="notify"/>
Onclick es el keyPoint, implementa el controlador en tu Actividad, entonces funcionará.
Es posible que desee echar un vistazo a esta biblioteca: https://github.com/mikepenz/MaterialDrawer . Hace que sea fácil de usar el cajón de navegación y admite vistas personalizadas.
- ActionBar – vista personalizada con ImageView centrado, Acción Items en los lados
- Adaptador de sincronización sin cuenta