Cyber Monday Sale 40% off unlimited courses & creative assets! 40% off unlimited assets! Save Now
Advertisement
  1. Code
  2. Android SDK

Cómo codificar un Navigation Drawer para Android App

by
Read Time:11 minsLanguages:

Spanish (Español) translation by Kelly Gianella (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

El equipo de diseño de materiales de Google define la funcionalidad de un navigation drawer en Android de la siguiente manera:

El navigation drawe se desliza desde la izquierda y contiene los destinos de navegación de la aplicación.

Un ejemplo de una aplicación popular de Android que implementa el navigation drawer es la aplicación Bandeja de entrada de Google, que utiliza un navigation drawer para navegar a diferentes secciones de la aplicación. Puedes comprobarlo tú mismo descargando la aplicación Bandeja de entrada de la tienda Google Play, si aún no la tienes en tu dispositivo. A continuación, la captura de pantalla muestra la bandeja de entrada con el cajón de navegación abierto.

Google Inbox Android app Google Inbox Android app Google Inbox Android app

El usuario puede ver el cajón de navegación cuando desliza un dedo desde el borde izquierdo de la actividad. También pueden encontrarlo desde la actividad de inicio (el nivel superior de la aplicación), tocando el icono de la aplicación (también conocido como el menú "hamburguesa") en la barra de acciones.

Ten en cuenta que si tienes muchos destinos diferentes (por ejemplo, más de seis) en tu aplicación, se recomienda que uses un navigation drawer.

En esta publicación, aprenderás a mostrar elementos de navegación dentro de un navigation drawer en Android. Veremos cómo usar la API DrawerLayout y NavigationView para realizar esta tarea. Para obtener más información, también aprenderás a usar la función de plantillas de Android Studio para poner en marcha rápidamente tu proyecto con un navigation drawer.

Puedes encontrar un proyecto de ejemplo (en Kotlin) para este tutorial en nuestro repositorio de GitHub para que puedas seguirlo fácilmente.

Prerrequisitos

Para poder seguir este tutorial, necesitarás:

1. Crea un proyecto de Android Studio

Abre Android Studio y crea un nuevo proyecto (puedes llamarlo NavigationDrawerDemo) con una actividad vacía llamada MainActivity. Asegúrate de marcar también la casilla Incluir soporte para Kotlin.

Android Studio new project dialogAndroid Studio new project dialogAndroid Studio new project dialog

2. Agrega el DrawerLayout y NavigationView

Para empezar a utilizar DrawerLayout y NavigationView en tu proyecto, necesitarás importar el soporte de diseño y también el artefacto de soporte de Android. Así que añádelos al archivo build.gradle de tu módulo para importarlos.

Además, incluye tanto el widget DrawerLayout como el widget NavigationView en tu archivo res/layout/activlty_main.xml.

Aquí creamos un widget DrawerLayout con el id drawer_layout. La propiedad tools:openDrawer se utiliza para mostrar el navigation drawer cuando el diseño XML está abierto en la vista de diseño de Android Studio.

La documentación oficial dice lo siguiente sobre DrawerLayout:

DrawerLayout actúa como un contenedor de nivel superior para el contenido de la ventana que permite que las vistas interactivas del "drawer" se extraigan de uno o ambos bordes verticales de la ventana.

Después de agregar el widget DrawerLayout, incluimos un diseño secundario que apunta a @layout / app_bar_main.

Aquí está mi archivo de recursos app_bar_main.xml. Este archivo simplemente tiene un CoordinatorLayout, un AppBarLayout, y un widget Toolbar.

Finalmente, creamos un widget NavigationView. La documentación oficial dice lo siguiente sobre NavigationView:

NavigationView representa un menú de navegación estándar para la aplicación. El contenido del menú se puede rellenar con un archivo de recursos de menú.

En el widget XML NavigationView, puede ver que agregamos un atributo android:layout_gravity con el valor start. Esto se utiliza para colocar el drawer: deseas que el drawer salga de la izquierda o de la derecha (el inicio o el final en las versiones de la plataforma que admiten la dirección del diseño). En nuestro caso, el cajón saldrá por la izquierda.

También incluimos un atributo app:headerLayout que apunta a @layout/nav_header_main. Esto añadirá una View como cabecera del menú de navegación.

Aquí está mi archivo de recursos de diseño nav_header_main.xml:

Este archivo de diseño simplemente tiene un LinearLayout, un ImageView, y un TextView.

Android Studio layout previewAndroid Studio layout previewAndroid Studio layout preview

Para incluir los elementos de menú para el navigation drawer, podemos usar el atributo app:menu con un valor que apunta a un archivo de recursos de menú.

Aquí está el archivo de recursos de menú res/menu/activity_main_drawer.xml:

Aquí hemos definido un menú utilizando el <menu>que sirve como un contenedor para los elementos de menú. Un <item> crea un MenuItem, que representa un solo elemento en un menú.

A continuación, definimos nuestro primer grupo de menús utilizando el <group> archivo. Un <group>sirve como un contenedor invisible para los <item> elementos de menú en nuestro caso. Cada uno de los elementos < item >  tiene un id, un icono y un título. Ten en cuenta que se dibujará una línea horizontal al final de cada  < grupo >  para nosotros cuando se muestra en el navigation drawer.

Un <item> también puede contener un elemento anidado para crear un <menu> submenú, hicimos esto en nuestro último <item>. Observa que este último <item> tiene un título de propiedad .

Ten en cuenta que al mostrar los elementos de la lista de navegación de un recurso de menú, podríamos usar un ListView en su lugar. Pero, al configurar el navigation drawer con un recurso de menú, obtenemos el estilo de diseño de material en el navigation drawer de forma gratuita. Si usaste un ListView, tendrías que mantener la lista y también aplicarle estilo para cumplir con las especificaciones de diseño de material recomendadas para el navigation drawer.

3. Inicialización de componentes

A continuación, vamos a inicializar instancias de nuestro DrawerLayout y ActionBarDrawerToggle. La inicialización va a ocurrir dentro de onCreate() en MainActivity.kt.

El ActionBarDrawerToggle configura el icono de la aplicación ubicado a la izquierda de la barra de acciones o la barra de herramientas para abrir y cerrar el cajón de navegación. Para poder crear una instancia de ActionBarDrawerToggle, tenemos que proporcionar los siguientes parámetros:

  • un contexto padre, por ejemplo, en una actividad se usa esto, mientras que en un fragmento se llama a getActivity()
  • una instancia del widget DrawerLayout para vincular a Actionbar de la actividad
  • El icono que se coloca encima del icono de la aplicación para indicar que hay un botón de alternancia
  • Los recursos de cadena para las operaciones abierto y cerrado respectivamente (para accesibilidad)

Invocamos el método addDrawerListener() en un DrawerLayout para conectar un ActionBarDrawerToggle con un DrawerLayout.

Ten en cuenta que también habilitamos el icono de la aplicación a través de setHomeButtonEnabled() y lo habilitamos para la navegación "ascendente" a través de setDisplayHomeAsUpEnabled().

Luego reenviamos los métodos de devolución de llamada de actividad onPostCreate(), onConfigurationChanged() y onOptionsItemSelected() al conmutador:

Esto es lo que hace syncState(), según la documentación oficial:

Sincroniza el estado del indicador del drawer/funcionamiento vinculado con el DrawerLayout ... Esto debe ser llamado desde el método onPostCreate de tu Actividad para sincronizar después de que el estado de la instancia del DrawerLayout haya sido restaurado, y en cualquier otro momento cuando el estado pueda haber divergido de tal manera que el ActionBarDrawerToggle no haya sido notificado. (Por ejemplo, si dejas de reenviar los eventos de drawer apropiados durante un período de tiempo).

4. Probando la App

¡En este punto, podemos ejecutar la aplicación!

First app demo First app demo First app demo

Como puedes ver, al iniciar la aplicación se mostrará el icono del navigation drawer "hamburguesa" en la barra de acciones. Intente tocar el icono de esta aplicación para abrir el drawer. Además, al hacer clic en los elementos del cajón de navegación no hará nada, vamos a manejar esa parte en la siguiente sección.

5. Controlar los eventos con un clic

Ahora, veamos cómo controlar los eventos, para cada uno de los elementos en el navigation drawer. Ten en cuenta que al hacer clic en cualquier elemento se supone que te llevará a una nueva actividad o fragmento, es por eso que se llama un cajón de navegación!

En primer lugar, la actividad debe implementar NavigationView.OnNavigationItemSelectedListener.

Al implementar este contrato o interfaz, ahora debemos reemplazar el único método: onNavigationItemSelected().

Este método se invoca cuando se selecciona un elemento en el menú de navegación. Usamos la expresión cuando para realizar diferentes acciones en función del elemento de menú en el que se hizo clic: los identificadores de elemento de menú sirven como constantes para la expresión cuando.

A continuación, tenemos que iniciar nuestro NavigationView y establecer este detector dentro de onCreate() de nuestra actividad.

¡Vuelve a ejecutar tu proyecto!

App demo with navigation item clicks configurationApp demo with navigation item clicks configurationApp demo with navigation item clicks configuration

Al hacer clic en algunos elementos, se muestra un mensaje del sistema, justo lo que esperábamos. Pero recuerda que al hacer clic en un elemento debe llevar al usuario a una nueva actividad o fragmento (ignoramos esto aquí por la brevedad).

Notarás que cuando haces clic en un elemento, el cajón todavía permanece. Sería mejor que cerraras automáticamente cada vez que se hiciera clic en un elemento. Veamos cómo hacerlo.

Para cerrar el cajón después de que hayas hecho clic en un vínculo, simplemente invoque closeDrawer() en una instancia de DrawerLayout y pase GravityCompat.START al método.

¡Realiza el proyecto una vez más y observa el resultado!

6. Manejo del botón Atrás presionado

Cuando el cajón está abierto, sería una mejor experiencia de usuario no cerrar la actividad de inicio si se presiona el botón Atrás. Esta es la forma en que funcionan las aplicaciones populares como la aplicación Bandeja de entrada de Google.

Por lo tanto, cuando el cajón está abierto y se presiona el botón Atrás, solo cierra el cajón en lugar de la actividad actual de inicio. A continuación, si el usuario vuelve a presionar el botón Atrás, se debe cerrar la actividad principal.

Así es como podemos lograr esto:

¡Vuelve a realizar el proyecto y pruébalo!

7. Bono: Uso de plantillas de Android Studio

Ahora que has aprendido sobre las API involucradas para crear un cajón de navegación, te mostraré un acceso directo que incrementa la rapidez. Simplemente puedes usar una plantilla en lugar de codificar una actividad de cajón de navegación desde cero.

Android Studio proporciona plantillas de código que siguen las mejores prácticas de diseño y desarrollo de Android. Estas plantillas de código existentes (disponibles en Java y Kotlin) pueden ayudarte a poner en marcha rápidamente tu proyecto. Una de estas plantillas se puede utilizar para crear una actividad de cajón de navegación.

Te mostraré cómo usar esta práctica función en Android Studio.

Para un nuevo proyecto,  Android Studio.

Create Android Project dialogCreate Android Project dialogCreate Android Project dialog

Escribe el nombre de la aplicación y haz clic en el botón Siguiente.

Puedes dejar los valores predeterminados tal como están en el cuadro de diálogo Dispositivos Android de destino. Haga clic de nuevo en el botón Siguiente.

Add an Activity to Mobile dialogAdd an Activity to Mobile dialogAdd an Activity to Mobile dialog

En el cuadro de diálogo Agregar una actividad al móvil, desplázate hacia abajo y selecciona Actividad del Navigation Drawer. Haga clic en el botón Siguiente después de eso.

Configure Activity dialogConfigure Activity dialogConfigure Activity dialog

En el último cuadro de diálogo, puedes cambiar el nombre de la actividad, el nombre del diseño o el título si lo desea. Por último, haga clic en el botón Finalizar para aceptar todas las configuraciones.

Android Studio ahora nos ha ayudado a crear un proyecto con una actividad de navigation drawer. ¡Genial!

Se recomienda encarecidamente explorar el código generado.

También puedes usar plantillas para un proyecto de Android Studio ya existente. Simplemente ve a Archivo> Nuevo > Actividad > Actividad de Navigation Drawer

Navigation from file menu too Navigation Drawer ActivityNavigation from file menu too Navigation Drawer ActivityNavigation from file menu too Navigation Drawer Activity

Las plantillas que vienen incluidas con Android Studio son buenas para diseños simples y para crear aplicaciones básicas, pero si deseas poner en marcha tu aplicación aún más, puede considerar algunas de las plantillas de aplicaciones disponibles en Envato Market.

Son un gran ahorro de tiempo para los desarrolladores experimentados, ayudándoles a cortar el problema de crear una aplicación desde cero y enfocar sus talentos en lugar de eso en las partes únicas y personalizadas de la creación de una nueva aplicación.

Conclusión

En este tutorial, aprendiste a crear un navigation drawer en Android mediante la API DrawerLayout y NavigationView desde cero. También exploramos cómo usar fácil y rápidamente las plantillas de Android Studio para crear un navigation drawer.

Recomiendo encarecidamente revisar las directrices oficiales de diseño de material para los navigation drawers para aprender más sobre cómo diseñar y utilizar correctamente los navigation drawers en Android.

¡Para obtener más información sobre la codificación para Android, revisa algunos de nuestros otros cursos y tutoriales aquí en Envato Tuts+!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.