Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK

Crea una interfaz con pestañas de Material Design en Android App

by
Read Time:11 minsLanguages:

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

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

El equipo de material design de Google define simplemente la funcionalidad de las pestañas en Android de la siguiente manera:

Las pestañas facilitan la exploración y el cambio de vistas.

En este post aprenderás a mostrar pestañas utilizando la API TabLayout y ViewPager. En este práctico tutorial, cubriremos lo siguiente:

  • Los componentes TabLayout y ViewPager.
  • Los diferentes modos de pestaña: desplazable y fija.
  • Cómo mostrar iconos en lugar de texto para los títulos de las pestañas.
  • Como extra, también aprenderás a utilizar la función de plantillas de Android Studio para arrancar rápidamente tu proyecto con una interfaz con pestañas.

En nuestro GitHub repo  puedes encontrar un proyecto de ejemplo para este tutorial para que puedas seguirlo fácilmente.

Prerrequisitos

Para poder seguir este tutorial, necesitarás:

También puedes aprender todos los entresijos del lenguaje Kotlin en mi serie Kotlin desde cero.

Introducción al componente TabLayout

Según la documentación oficial de Android sobre TabLayout, dice

TabLayout proporciona un diseño horizontal para mostrar las pestañas.

El componente TabLayout es uno de los componentes introducidos como parte de los artefactos de diseño de materiales. Además, también está incluido en la biblioteca de apoyo al diseño. En un TabLayout, cuando se selecciona o se toca una pestaña, se muestra al usuario una página diferente (o un fragmento).

El componente TabLayout puede hacer que las pestañas que se muestren funcionen de dos maneras: fijas y desplazables. Si las pestañas son fijas, todas las pestañas se mostrarán en la pantalla al mismo tiempo.

La captura de pantalla de abajo es la última aplicación oficial de WhatsApp para Android (en el momento de escribir este artículo), que utiliza un TabLayout con una configuración de modo fijo.

WhatsApp fixed TabLayout sampleWhatsApp fixed TabLayout sampleWhatsApp fixed TabLayout sample

En las pestañas desplazables, si el número de pestañas es demasiado amplio para la pantalla, el usuario puede deslizar hacia la izquierda o la derecha para ver más pestañas.

Este es un ejemplo de un TabLayout con modo de pestañas desplazables, mostrado en la última versión de la aplicación News & Weather para Android de Google.

Scrollable tab mode in Google News Weather appScrollable tab mode in Google News Weather appScrollable tab mode in Google News Weather app

Además, la información que aparece en una pestaña puede ser texto, un icono o una combinación de texto e icono. Por ejemplo, la última aplicación de Twitter para Android utiliza iconos en lugar de texto en cada pestaña.

Icons on tabs in Twitter Android appIcons on tabs in Twitter Android appIcons on tabs in Twitter Android app

En las siguientes secciones, nos sumergiremos en la codificación de una aplicación sencilla que hace uso de TabLayout con un ViewPager. ¡Vamos a empezar!

El diseño no es sólo lo que parece y lo que se siente. El diseño es cómo funciona. - Steve Jobs

1. Crea un proyecto de Android Studio

Inicia Android Studio 3 y crea un nuevo proyecto (puedes llamarlo TabLayoutDemo) con una actividad vacía llamada MainActivity.

Create Android Project pageCreate Android Project pageCreate Android Project page

2. Crea los fragmentos (páginas)

Vamos a crear un TabLayout con sólo tres pestañas. Cuando se selecciona cada una de las pestañas, se muestra un fragmento o página de Android diferente. Así que ahora vamos a crear los tres fragmentos de Android para cada una de las pestañas. Comenzaremos con la primera clase de fragmento, y deberás seguir un proceso similar para las dos clases de fragmentos restantes: FragmentTwo.kt y FragmentThree.kt.

Aquí está mi FragmentOne.kt:

Aquí está también mi R.layout.fragment_one:

3. Agrega el TabLayout y ViewPager

Para empezar a utilizar TabLayout y ViewPager en tu proyecto, asegúrate de 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, visita tu archivo res/layout/activlty_main.xml para incluir tanto el widget TabLayout como la vista ViewPager.

Aquí hemos creado un simple TabLayout con el id tab_layout. En nuestro widget XML TabLayout, se puede ver que hemos incluido algunos atributos-como app:tabMode para ser fijo y también app:tabGravity para ser relleno. La propiedad app:tabGravity se utiliza para configurar cómo se mostrarán los elementos de la pestaña para que ocupen el espacio disponible. Establecemos esto como relleno, lo que distribuirá los elementos uniformemente a través del ancho del TabLayout. Ten en cuenta que esto será más visible en pantallas más anchas, como las tablets.

También he incluido un atributo de estilo personalizado (@style/CustomTabLayout) en nuestro widget TabLayout.

Comenzamos a personalizar nuestro TabLayout estableciendo los valores de los atributos a aplicar en el TabLayout. Aquí están los detalles de algunos de los atributos aplicados:

  • tabIndicatorColor: establece el color del indicador de pestaña para la pestaña actualmente seleccionada. También se puede establecer mediante programación llamando a setSelectedTabIndicatorColor() en una instancia de TabLayout.
  • tabIndicatorHeight: establece la altura del indicador de tabulación para la pestaña seleccionada actualmente. Esto también se puede establecer mediante programación llamando a setSelectedTabIndicatorHeight() en una instancia de TabLayout.
  • tabSelectedTextColor: establece los colores del texto para los diferentes estados (normal, seleccionado) utilizados para las pestañas. El equivalente de este atributo en Java es setTabTextColors().

Inmediatamente después de crear nuestro widget TabLayout en XML, la siguiente vista fue un ViewPager. La documentación oficial dice lo siguiente sobre ViewPager:

Gestor de diseño que permite al usuario hojear a izquierda y derecha las páginas de datos...

4. Crea el PagerAdapter

Necesitamos crear una subclase en SampleAdapter.kt que extienda el FragmentPagerAdapter. Esta clase es la responsable de gestionar los diferentes fragmentos que se mostrarán en las pestañas.

Aquí anulamos tres métodos de la clase padre: getItem(), getCount(), y getPageTitle(). Aquí están las explicaciones de los métodos:

  • getItem(): devuelve un fragmento para una posición determinada dentro del ViewPager.
  • getCount(): indica cuántas páginas habrá en el ViewPager.
  • getPageTitle(): este método es llamado por el ViewPager para obtener una cadena de título que describa la pestaña especificada.

Por ejemplo, si la pestaña seleccionada es la primera pestaña con el título "Pestaña 1 Elemento", mostrará inmediatamente al usuario una página FragmentOne.

5. Inicialización de componentes

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

Obtenemos referencias a nuestro TabLayout y ViewPager  desde R.layout.activity_main y los inicializamos. También creamos una instancia de nuestro SampleAdapter, pasando una instancia de FragmentManagercomo argumento. Necesitamos proporcionar las vistas para nuestro ViewPager, por lo que llamamos a setAdapter() y le pasamos nuestro adaptador. Finalmente, llamamos a setupWithViewPager() en una instancia de TabLayout para hacer algo de trabajo:

  • creación de la ficha necesaria para cada página
  • configurar los oyentes necesarios

Cuando el usuario pulsa sobre una pestaña, cambia las páginas en el ViewPager y muestra la página requerida (o Fragmento). Además, al pasar de una página a otra se actualiza la pestaña seleccionada. En otras palabras, este método nos ayuda a ocuparnos del cambio de estado del scroll y de los clics en las pestañas.

La función onTabSelectedListener() se utiliza para incluir un oyente que será invocado cuando la selección de la pestaña cambie. Hemos anulado las siguientes devoluciones de llamada:

  • onTabSelected(): se activa cuando una ficha entra en el estado seleccionado.
  • onTabUnselected(): se invoca cuando una ficha sale del estado seleccionado.
  • onTabReselected(): se invoca cuando una ficha que ya está seleccionada es elegida de nuevo por el usuario.

Ten en cuenta que también podemos establecer el modo de pestañas mediante programación -en lugar de a través del XML del diseño- utilizando setTabMode() en una instancia de TabLayout. Pasamos el modo (fijo o desplazable) a este método como argumentos. Por ejemplo, podemos pasar TabLayout.MODE_FIXED para un modo fijo o TabLayout.MODE_SCROLLABLE para un modo desplazable.

Ten en cuenta que si deseas crear explícitamente las pestañas en lugar de utilizar el método de ayuda setUpWithViewPager(), puedes utilizar newTab() en una instancia de TabLayout.

Ten en cuenta también que podríamos crear explícitamente las pestañas a través de XML en lugar de programarlas.

6. Prueba de la App

Finalmente, ¡puedes ejecutar la aplicación!

Final demo app Final demo app Final demo app

Intenta interactuar con la aplicación deslizando el dedo hacia la izquierda o hacia la derecha y tocando las pestañas.

7. Pestañas desplazables

Las directrices oficiales de diseño de materiales sobre las pestañas dicen lo siguiente sobre las pestañas desplazables:

Las pestañas desplazables muestran un subconjunto de pestañas en un momento dado. Pueden contener etiquetas de pestañas más largas y un mayor número de pestañas que las pestañas fijas. Las pestañas desplazables se utilizan mejor para contextos de navegación en interfaces táctiles cuando los usuarios no necesitan comparar directamente las etiquetas de las pestañas.

Veamos cómo crear pestañas con configuración de modo desplazable. Hice el título para cada una de las pestañas más largo que antes. Aquí está el resultado en modo fijo:

Longer tab title in TabLayoutLonger tab title in TabLayoutLonger tab title in TabLayout

Puedes ver que TabLayout ha utilizado múltiples líneas para mostrar cada uno de los títulos de las pestañas. En algunas situaciones, ¡incluso truncará los títulos! Esto crea una mala experiencia para el usuario, así que si los títulos de las pestañas tienen que ser muy largos, deberías considerar usar el modo desplazable. Ten en cuenta también que si vas a tener más de cuatro pestañas, se recomienda hacer el modo de pestañas desplazable.

Cambiemos la propiedad app:tabMode de fijo a desplazable.

Recuerda que también puedes establecer el modo de tabulación mediante programación, como se ha comentado anteriormente.

Scrollable mode for tabsScrollable mode for tabsScrollable mode for tabs

8. Mostrar los iconos de las pestañas

Ahora vamos a ver cómo reemplazar el texto del elemento de la pestaña con iconos.

Aquí llamamos a getTabAt() en una instancia de TabLayout. La llamada a este método devolverá la pestaña en el índice especificado. A continuación, llamamos a setIcon(). Al llamar a este método se establecerá el icono que se muestra en esta pestaña.

También he puesto el modo de pestañas como fijo.

Todavía reemplazo el getPageTitle() dentro de SampleAdapter.

Aquí está el resultado:

App demo with tab icons and titlesApp demo with tab icons and titlesApp demo with tab icons and titles

Ahora, si quieres sólo los iconos, simplemente no anulas getPageTitle().

App demo with tab icons App demo with tab icons App demo with tab icons

9. Bonificación: Uso de plantillas de Android Studio

En lugar de escribir tanto código para crear una interfaz con pestañas o una actividad desde cero, Android Studio 3.0 tiene algunas plantillas de código preexistentes (disponibles en Java y Kotlin) para ayudar a poner en marcha tu proyecto. Una de estas plantillas se puede utilizar para crear una actividad con pestañas.

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

Para un nuevo proyecto, enciende Android Studio 3.

Android Studio create project dialogAndroid Studio create project dialogAndroid Studio create project dialog

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

Puedes dejar los valores predeterminados tal y como están en el cuadro de diálogo Dispositivos Android de destino. Vuelve a hacer clic 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 con pestañas. Haz clic en el botón Siguiente después de eso.

Configure Activity dialogConfigure Activity dialogConfigure Activity dialog

En el último diálogo, desplázate hasta el menú desplegable Estilo de navegación y selecciona Pestañas de la barra de acción (con ViewPager). Por último, haz clic en el botón Finalizar para aceptar todas las configuraciones.

Android Studio nos ha ayudado a crear un proyecto con una actividad con pestañas. ¡Realmente genial!

Android Studio XML design view for layoutAndroid Studio XML design view for layoutAndroid Studio XML design view for layout

Se recomienda encarecidamente explorar el código generado.

En un proyecto de Android Studio ya existente, para utilizar esta plantilla, simplemente ve a Archivo > Actividad > Actividad con pestañas. Y sigue los pasos similares a los descritos anteriormente.

Navigation to tabbed activity button in Android StudioNavigation to tabbed activity button in Android StudioNavigation to tabbed activity button in Android Studio

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, puedes considerar algunas de las plantillas de aplicaciones disponibles en Envato Market.

Son un gran ahorro de tiempo para los desarrolladores experimentados, ya que les ayudan a reducir el trabajo de crear una aplicación desde cero y a centrar su talento en las partes únicas y personalizadas de la creación de una nueva aplicación.

Conclusión

En este tutorial, aprendiste a crear una interfaz con pestañas en Android con la API TabLayout y ViewPager desde cero. También exploramos cómo usar fácil y rápidamente las plantillas de Android Studio para crear una interfaz con pestañas.

Recomiendo encarecidamente revisar las pautas oficiales de diseño de material para pestañas para obtener más información sobre cómo diseñar y usar pestañas correctamente en Android.

¡Para obtener más información sobre la codificación para Android, echa un vistazo a 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.