¿Cómo se utiliza TabItem cuando se coloca en el XML de la disposición?
La documentación TabLayout
da un ejemplo de anidar TabItem
directamente dentro de TabLayout
así:
<android.support.design.widget.TabLayout android:layout_height="wrap_content" android:layout_width="match_parent"> <android.support.design.widget.TabItem android:text="@string/tab_text"/> <android.support.design.widget.TabItem android:icon="@drawable/ic_android"/> </android.support.design.widget.TabLayout>
Pero no da ningún ejemplo de cómo esto podría ser utilizado en la práctica, y la documentación para TabItem dice:
- Android.support.v4.app.FragmentPagerAdapter no se puede aplicar a android.app.FragmentManager
- ¿Cómo obtengo la vista de una pestaña en un TabLayout?
- Crear tabhost personalizado como en el navegador de cromo para Android
- Cómo configurar las pestañas en la parte inferior de la pantalla en android?
- FragmentPagerAdapter no está trabajando en la recreación del fragmento
Esta vista no se agrega realmente a TabLayout, es apenas un maniquí que permite fijar el texto de un artículo de la lengüeta, el icono y la disposición de encargo.
¿Para qué sirve TabItem
? Después de una extensa búsqueda de Google, no puedo encontrar un solo ejemplo de alguien que defina TabItems en XML. ¿Hay alguna manera de configurar una actividad tabulada usando TabItem en el archivo de recursos como se muestra arriba?
- No se puede resolver el constructor ArrayAdapter
- NullPointerException en rotación durante el comando dispatchCreateOptionsMenu, la traza de pila no incluye ninguna función en mi aplicación
- ActionBar y ActionBar.Tab y el cajón de navegación android
- ¿Cómo funciona exactamente la acción_bar_embed_tabs en Android?
- Pestañas de la barra de acciones anidadas (con ViewPager)
- Las pestañas de la barra de acciones que aparecen como lista desplegable
- Pestaña con icono usando TabLayout en Android Design Library
- Personalización de la dirección de desplazamiento de la presentación de tabulación
Esto parece ser una adición relativamente reciente a la biblioteca de diseño, aparentemente agregada en la versión 23.2.0, aunque no se menciona en el historial de revisiones . Su funcionalidad es bastante básica, y los únicos atributos que parece utilizar son los tres dados en sus documentos : text
, icon
y layout
.
Desde la prueba, parece que es básicamente un acceso directo XML para crear una nueva Tab
, y establecer su texto, icono y View
personalizada, como se haría normalmente en el código. Cuando dice "Esta vista no se agrega realmente a TabLayout", creo que significa sugerir que no es una View
en el sentido normal, en que no se puede establecer ningún tipo de atributo de diseño estándar en él, como layout_width
o de background
. Simplemente sirve para hacer que TabLayout
cree una nueva Tab
para cada TabItem
y llame a setText()
, setIcon()
y setCustomView()
consecuencia.
Por ejemplo, para agregar una Tab
en el código, normalmente haríamos algo como esto:
TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); // Add Tab TabLayout.Tab tab = tabLayout.newTab(); tab.setCustomView(R.layout.tab); tab.setText("Tab 1"); tab.setIcon(R.drawable.ic_launcher); tabLayout.addTab(tab);
Considerando que ahora podemos reemplazar todo después del comentario anterior por la adición de un TabItem
en el diseño.
<android.support.design.widget.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.design.widget.TabItem android:layout="@layout/tab" android:text="Tab 1" android:icon="@drawable/ic_launcher" /> </android.support.design.widget.TabLayout>
Tenga en cuenta que siguen aplicándose los mismos requisitos para el diseño de View
personalizada. Es decir, TextView
para el texto debe tener el identificador de recursos del sistema @android:id/text1
, y el ImageView
para el icono debe tener el ID @android:id/icon
. Como ejemplo, la R.layout.tab
de arriba:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical"> <ImageView android:id="@android:id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@android:id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>