Google introdujo la NavigationView
versión 22.2.0 de la Biblioteca de soporte de diseño con la que puede crear un cajón muy fácilmente utilizando un recurso de menú.
¿Cómo puedo crear una línea divisoria simple entre dos elementos? Agrupar los artículos no funcionó. La creación de una sección de elementos secundarios crea una línea divisoria, pero requiere un título, que no quiero.
Cualquier ayuda sería apreciada.
Respuestas:
Todo lo que necesita hacer es definir un
group
con una identificación única , he comprobado la implementación si el grupo tiene diferentes identificaciones, creará un divisor.Ejemplo de menú, creando el separador:
fuente
setChecked
parece funcionar a nivel grupal. Si selecciona un elemento en el Grupo A, luego abra nuevamente el cajón y seleccione el elemento en el Grupo B, ambos elementos permanecerán resaltados. Quizás Google arregle este comportamiento en la próxima versión, pero por ahora, esa es la desventaja de usar múltiples grupos con NavigationView.android:checkableBehavior="none"
con su segundo grupo (supongo que son acciones, no navegación)group
compilador, se ejecutará pero los divisores están ocultos.cree un drawer_item_bg.xml dibujable como este,
y agréguelo a NavigationView como aplicación: itemBackground = "@ drawable / drawer_item_bg"
y aquí vamos...
fuente
navMenuView.addItemDecoration(new DividerItemDecoration(NavigationViewActivity.this, DividerItemDecoration.VERTICAL));
para el borde perfecto del artículoSimple agregar DeviderItemDecoration:
Se ve así:
fuente
addItemDecoration
línea a 1px?Puede agregar divisores fácilmente configurando el Fondo del elemento del menú a través de XML usando
app:itemBackground
Y use LayerDrawable como fondo. Conserva la superposición de ondas de diseño de material para clics.
El resultado:
fuente
Creo que tengo una solución aún mejor para el problema de múltiples elementos marcados. Utilizando mi manera, no tiene que preocuparse por cambiar su código al agregar nuevas secciones a su menú. Mi menú se parece a la solución aceptada escrita por Jared, con la diferencia de usar andoid: checkableBehavior = " all " en los grupos:
El checkableBehavior de 'all' hace posible marcar / desmarcar elementos individuales a voluntad, independientemente del grupo al que pertenecen. Solo tiene que almacenar el último elemento de menú marcado. El código java se ve así:
fuente
Hacer diferentes grupos, como la respuesta de Nilesh, hace un divisor entre ellos, pero crea el problema de dos elementos marcados en el cajón de navegación.
Una forma simple de cómo manejé esto fue:
fuente
android:checkableBehavior="none"
No estoy seguro de si esto está arreglado
API 26 (Android 8)
o si fue posible todo el tiempo. Todavía soy un novato en la programación de Android. Sin embargo, agregué grupos de padres como a continuación. Pruebas en teléfonos físicos con Android 6,nav_g1
onav_g2
se anule la selección de otros artículos.Java
código a los oyentesCódigo de menú
Notas
android:checkableBehavior="single"
requiere tener un grupo principal para que el problema de múltiples elementos de menú seleccionados en esta respuesta (mencionado en los comentarios de hungryghost) no ocurraY aquí está la captura de pantalla.
fuente
Quería divisores sobre el primer artículo y después del último artículo. Usando la solución @Nilesh, tuve que agregar elementos de menú ficticios y establecer habilitado en falso, lo que me pareció realmente sucio. Además, ¿qué pasa si quiero hacer otras cosas interesantes en mi menú?
Noté que el NavigationView extiende FrameLayout para que pueda poner su propio contenido como lo haría para un FrameLayout. Luego configuro un menú vacío xml para que solo muestre mi diseño personalizado. Entiendo que esto probablemente va en contra del camino que Google quiere que tomemos, pero si desea un menú verdaderamente personalizado, esta es una manera fácil de hacerlo.
Aqui esta el estilo
Y dibujable
Y el menu
editar:
En lugar de botones, puede usar TextView con dibujable que imita el aspecto de los elementos del menú original:
fuente
El crédito debe ir a Zorawar por la solución. Perdón por duplicar la respuesta pero no pudo agregar tanto texto formateado dentro de un comentario.
La solución de Zorawar funciona, el código podría mejorarse como tal:
fuente
La respuesta de Nileh es correcta, excepto que tiene una falla de verificación doble.
Entonces usando
con identificación única resolverá el problema
fuente
Si desea agregar un divisor dinámicamente , puede agregar un SubMenu vacío como este:
Esto agregará un divisor.
solo asegúrese de pasar el índice correcto cuando use
menu.getItem(int index)
fuente
Además de las respuestas anteriores, si desea separadores decorativos pero no desea crear varios grupos debido a problemas de "comportamiento comprobable", puede asignar la misma identificación de grupo a todos sus grupos.
Ejemplo:
fuente
Si la respuesta seleccionada no funciona para usted, puede intentar agregar esto
onCreateOptionsMenu
además de dar la identificación única del grupo:fuente