Crear una interfaz tabulada de diseño de materiales en una aplicación de Android

Lo que vas a crear

El equipo de diseño de materiales en Google simplemente define la funcionalidad de las pestañas en Android de la siguiente manera:

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

En esta publicación aprenderás cómo mostrar pestañas usando la TabLayout y ViewPager API. En este práctico tutorial, cubriremos lo siguiente:

  • los TabLayout y ViewPager componentes. 
  • Los diferentes modos de pestañas: desplazables y fijos..
  • Cómo mostrar iconos en lugar de texto para los títulos de las pestañas.
  • Para obtener una bonificación, también aprenderá a usar la función de plantillas de Android Studio para arrancar rápidamente su proyecto con una interfaz con pestañas. 

Puede encontrar un proyecto de ejemplo para este tutorial en nuestro repositorio de GitHub para que pueda seguirlo fácilmente..

Prerrequisitos

Para poder seguir este tutorial, necesitarás:

  • Android Studio 3.0 o superior
  • Kotlin plugin 1.1.51 o superior

También puedes aprender todos los entresijos del lenguaje Kotlin en mi serie Kotlin From Scratch.

Introducción al componente TabLayout

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

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

los TabLayout componente es uno de los componentes introducidos como parte de los artefactos de diseño del material. Además, también se incluye en la biblioteca de soporte de diseño. en un TabLayout, cuando se selecciona o pulsa una pestaña, se muestra una página (o fragmento) diferente al usuario. 

los TabLayout el componente puede tener su función de pestañas mostradas de una de dos maneras: fija y desplazable. Si las pestañas son fijas, todas las pestañas se mostrarán en la pantalla al mismo tiempo.  

La captura de pantalla a continuación es la última aplicación oficial de WhatsApp para Android (a partir de este escrito), que utiliza un TabLayout con una configuración de modo fijo. 

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

Aquí hay un ejemplo de TabLayout con el modo de pestaña desplazable, que se muestra en la última versión de la aplicación para Android News & Weather de Google. 

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

En las siguientes secciones, analizaremos una aplicación sencilla que hace uso de TabLayout con un ViewPager. Comencemos! 

El diseño no es solo lo que parece y se siente. El diseño es como funciona. - Steve Jobs

1. Crear un proyecto de Android Studio

Inicie Android Studio 3 y cree un nuevo proyecto (puede nombrarlo TabLayoutDemo) con una actividad vacía llamada Actividad principal.

2. Creando los Fragmentos (Páginas)

Vamos a crear un TabLayout con solo tres pestañas Cuando se selecciona cada una de las pestañas, 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 fragmentos, y debe seguir un proceso similar para las dos clases de fragmentos restantes-FragmentTwo.kt y FragmentThree.kt

Aquí está mi FragmentOne.kt:

import android.os.Bundle import android.support.v4.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup class FragmentOne: Fragment () anulación fun onCreateView (inflater: LayoutInflater? contenedor: ViewGroup ?, savedInstanceState: Bundle?): ¿Ver? = inflater !!. inflate (R.layout.fragment_one, container, false) objeto complementario fun newInstance (): FragmentOne = FragmentOne ()

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

  

3. Agregando TabLayout y ViewPager

Comenzar a usar TabLayout y ViewPager en su proyecto, asegúrese de importar el soporte de diseño y también el artefacto de soporte de Android, así que agréguelos a los módulos. construir.gradle archivo para importarlos. 

dependencias implementación 'com.android.support:design:26.1.0' implementación 'com.android.support:support-v4:26.1.0'

Además, visite su res / layout / activlty_main.xml archivo para incluir tanto la TabLayout widget y el ViewPager ver. 

       

Aquí creamos un sencillo TabLayout con identificación tab_layout. En nuestro TabLayout Widget XML, puede ver que incluimos algunos atributos, como aplicación: tabMode ser fijo y también aplicación: tabGravity ser llenar. los aplicación: tabGravity La propiedad se utiliza para configurar cómo se mostrarán los elementos de la pestaña para ocupar el espacio disponible. Establecimos esto a llenar, que distribuirá los artículos uniformemente en todo el ancho del TabLayout. Tenga en cuenta que esto será más visible en pantallas más anchas, como tabletas. 

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

Comenzamos a personalizar nuestro TabLayout estableciendo los valores de los atributos que se aplicarán 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 seleccionada actualmente. Esto también se puede configurar mediante programación llamando setSelectedTabIndicatorColor () en un TabLayout ejemplo. 
  • tabIndicatorHeight: establece la altura del indicador de pestaña para la pestaña seleccionada actualmente. Esto también se puede establecer programáticamente llamando al setSelectedTabIndicatorHeight () en un TabLayout ejemplo. 
  • 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 TabLayout widget en XML, la siguiente vista fue una ViewPager. La documentación oficial dice lo siguiente acerca de ViewPager:

Administrador de diseño que permite al usuario voltear hacia la izquierda y hacia la derecha a través de las páginas de datos ...

4. Creando el PagerAdapter

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

importar android.support.v4.app.Fragment importar android.support.v4.app.FragmentManager importar android.support.v4.app.FragmentPagerAdapter clase SampleAdapter (fm: FragmentManager): FragmentPagerAdapter (fm) override fun getItem (position: Int ): ¿Fragmento? = cuándo (posición) 0 -> FragmentOne.newInstance () 1 -> FragmentTwo.newInstance () 2 -> FragmentThree.newInstance () else -> null invalide fun getPageTitle (position: Int): CharSequence = when (position) 0 -> "Elemento de Tab 1" 1 -> "Elemento de Tab 2" 2 -> "Elemento de Tab 3" else -> "" anular la diversión getCount (): Int = 3

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

  • obtiene el objeto(): devuelve un Fragmento para una posición particular dentro de la ViewPager
  • getCount (): Indica cuantas páginas habrá en el ViewPager
  • getPageTitle (): este método es llamado por el ViewPager para obtener una cadena de título para describir la pestaña especificada.

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

5. Inicialización de componentes.

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

import android.os.Bundle import android.support.design.widget.TabLayout import android.support.v4.view.ViewPager import android.support.v7.app.AppCompatActivity import android.support.v7.widget.Toolbar class MainActivity: AppCompatActivity () override fun onCreate (savedInstanceState: Bundle?) super.onCreate (savedInstanceState) setContentView (R.layout.activity_main) initToolbar () val tabLayout Observe las imágenes. R.id.view_pager) val adapter = SampleAdapter (supportFragmentManager) viewPager.adapter = adaptador tabLayout.setupWithViewPager (viewPager) tabLayout.addOnTraspelraLoCatComPraCatRP.P.P.P.R.P. pestaña: TabLayout.Tab)  anular la diversión onTabReselected (tab: TabLayout.Tab) ) diversión privada initToolbar () val toolbar: Toolbar = findViewById (R.id.toolbar) setSupportActionBar (toolbar) supportActionBar! title = "TabLa tu demo "

Tenemos referencias a nuestra TabLayout y ViewPager desde R.layout.activity_main Y los inicializo. También creamos una instancia de nuestro SampleAdapter-pasando una instancia de Gestor de fragmentos como un argumento Necesitamos suministrar las vistas para nuestros ViewPager, así que llamamos setAdapter () Y le pasamos en nuestro adaptador creado para ello. Finalmente, llamamos setupWithViewPager () en una instancia de TabLayout para hacer un trabajo

  • Creación de la pestaña requerida para cada página.
  • configurando los oyentes requeridos

Cuando el usuario toca una pestaña, cambia las páginas del ViewPager y muestra la página requerida (o Fragmento). Además, al deslizar entre páginas se actualiza la pestaña seleccionada. En otras palabras, este método nos ayuda a cuidar el cambio de estado de desplazamiento y hacer clic en las pestañas.

los onTabSelectedListener () se utiliza para incluir un escucha que se invocará cuando cambie la selección de la pestaña. Hemos anulado las siguientes devoluciones de llamada:

  • onTabSelected (): se activa cuando una pestaña ingresa al estado seleccionado.
  • onTabUnselected (): se invoca cuando una pestaña sale del estado seleccionado.
  • onTabReselected (): se invoca cuando el usuario elige nuevamente una pestaña que ya está seleccionada.

Tenga en cuenta que también podemos establecer el modo de pestaña mediante programación, en lugar de a través del diseño XML, usando 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 de desplazamiento.

tabLayout.tabMode = TabLayout.MODE_FIXED tabLayout.tabMode = TabLayout.MODE_SCROLLABLE

Tenga en cuenta que si desea crear explícitamente las pestañas en lugar de utilizar el método auxiliar setUpWithViewPager (), en su lugar puedes usar nueva pestaña() en un TabLayout ejemplo. 

val tabLayout: TabLayout = findViewById (R.id.tab_layout) tabLayout.addTab (tabLayout.newTab (). setText ("Songs")) tabLayout.addTab (tabLayout.newTab (). setText ("Albums") (tabLayout.newTab (). setText ("Artists")) 

Tenga en cuenta también que podríamos crear explícitamente las pestañas a través de XML en lugar de programáticamente. 

    

6. Probando la aplicación

Finalmente, puedes ejecutar la aplicación.! 

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

7. Pestañas de desplazamiento

Las pautas oficiales de diseño de materiales en las pestañas dicen lo siguiente acerca de 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 número mayor de pestañas que las pestañas fijas. Las pestañas desplazables se utilizan mejor para explorar contextos 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 largas que antes. Aquí está el resultado en modo fijo:

Puedes ver eso TabLayout ha utilizado múltiples líneas para mostrar cada uno de los títulos de la pestaña. ¡En algunas situaciones, incluso se truncarán los títulos! Esto crea una mala experiencia de usuario, por lo que si los títulos de las pestañas deben ser muy largos, debe considerar el uso del modo de desplazamiento. Tenga en cuenta también que si va a tener más de cuatro pestañas, se recomienda hacer que el modo de pestaña sea desplazable.

Vamos a cambiar el aplicación: tabMode propiedad de fijo a desplazable.

 app: tabMode = "desplazable" />

Recuerde, también puede configurar el modo de pestaña mediante programación, como se explicó anteriormente. 

8. Mostrando iconos de pestañas

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

clase MainActivity: AppCompatActivity () override fun onCreate (savedInstanceState: Bundle?) // ... tabLayout.setupWithViewPager (viewPager) tabLayout.getTabAt (0) !! ) !!. setIcon (android.R.drawable.ic_dialog_info) tabLayout.getTabAt (2) !!. setIcon (android.R.drawable.ic_dialog_alert) // ... // ...

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

También configuro el modo de pestaña para ser fijo.

Todavía anulo el getPageTitle () dentro de SampleAdapter

clase SampleAdapter (fm: FragmentManager): FragmentPagerAdapter (fm) //… sobrescribe fun getPageTitle (position: Int): CharSequence = when (position) 0 -> "TAB 1" 1 -> "TAB 2" 2 -> " TAB 3 "else ->" " //…

Aquí está el resultado:

Ahora, si solo quieres los íconos, simplemente no anulas getPageTitle ().

9. Bonus: usando plantillas de Android Studio

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

Te mostraré cómo usar esta característica útil en Android Studio 3. 

Para un nuevo proyecto, inicia Android Studio 3. 

Ingrese el nombre de la aplicación y haga clic en Siguiente botón. 

Puede dejar los valores por defecto como están en el Dispositivos Android objetivo diálogo. Haga clic en el Siguiente botón de nuevo. 

En el Añadir Una Actividad para Móvil diálogo, desplácese hacia abajo y seleccione Actividad tabulada. Haga clic en el Siguiente botón después de eso. 

En el último diálogo, desplácese hasta la Estilo de navegación menú desplegable y seleccione Pestañas de la barra de acción (con ViewPager). Finalmente, haga clic en Terminar botón para aceptar todas las configuraciones. 

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

Se recomienda encarecidamente explorar el código generado.. 

En un proyecto de Android Studio ya existente, para usar esta plantilla, simplemente vaya a Archivo> Actividad> Actividad tabulada. Y siga los pasos similares que fueron descritos previamente.. 

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

Son un gran ahorro de tiempo para los desarrolladores experimentados, ya que les ayudan a superar el problema de crear una aplicación desde cero y centran sus talentos en lugar de las partes únicas y personalizadas de crear una nueva aplicación..

Conclusión

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

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

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