Estoy intentando utilizar el nuevo Design TabLayout en mi proyecto. Quiero que el diseño se adapte a cada tamaño y orientación de pantalla, pero se puede ver correctamente en una orientación.
Estoy tratando con Gravity and Mode configurando mi tabLayout como:
tabLayout.setTabGravity(TabLayout.GRAVITY_CENTER);
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
Así que espero que si no hay espacio, tabLayout sea desplazable, pero si hay espacio, estará centrado.
De los guías:
public static final int GRAVITY_CENTER Gravedad usada para diseñar las pestañas en el centro de TabLayout.
public static final int GRAVITY_FILL Gravedad usada para llenar el TabLayout tanto como sea posible. Esta opción solo tiene efecto cuando se usa con MODE_FIXED.
public static final int MODE_FIXED Las pestañas fijas muestran todas las pestañas al mismo tiempo y se utilizan mejor con contenido que se beneficia de cambios rápidos entre pestañas. El número máximo de pestañas está limitado por el ancho de la vista. Las pestañas fijas tienen el mismo ancho, según la etiqueta de pestaña más ancha.
public static final int MODE_SCROLLABLE Las pestañas desplazables muestran un subconjunto de pestañas en cualquier momento dado y pueden contener etiquetas de pestañas más largas y un mayor número de pestañas. 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.
Entonces, GRAVITY_FILL es compatible solo con MODE_FIXED pero, no especifica nada para GRAVITY_CENTER, espero que sea compatible con MODE_SCROLLABLE, pero esto es lo que obtengo usando GRAVITY_CENTER y MODE_SCROLLABLE
Entonces está usando SCROLLABLE en ambas orientaciones, pero no está usando GRAVITY_CENTER.
Esto es lo que esperaría del paisaje; pero para tener esto, necesito configurar MODE_FIXED, entonces lo que obtengo en retrato es:
¿Por qué GRAVITY_CENTER no funciona para SCROLLABLE si tabLayout se ajusta a la pantalla? ¿Hay alguna forma de configurar la gravedad y el modo dinámicamente (y ver lo que estoy esperando)?
¡Muchas gracias!
EDITADO: Este es el diseño de mi TabLayout:
<android.support.design.widget.TabLayout
android:id="@+id/sliding_tabs"
android:layout_width="match_parent"
android:background="@color/orange_pager"
android:layout_height="wrap_content" />
fuente
Respuestas:
Efectos de solo gravedad de tabulación
MODE_FIXED
.Una posible solución es configurar su
layout_width
towrap_content
ylayout_gravity
tocenter_horizontal
:Si las pestañas son más pequeñas que el ancho de la pantalla, la
TabLayout
propia también será más pequeña y estará centrada debido a la gravedad. Si las pestañas son más grandes que el ancho de la pantalla,TabLayout
coincidirán con el ancho de la pantalla y se activará el desplazamiento.fuente
app:tabMaxWidth="0dp"
yandroid:layout_centerHorizontal="true"
trabajado para centrar las pestañas.así es como lo hice
TabLayout.xml
Oncreate
Hice pequeños cambios de la solución de @Mario Velasco en la parte ejecutable
fuente
tabLayout.getWidth()
siempre devuelve cero para mímantiene las cosas simples solo agregue la aplicación: tabMode = "scrollable" y android: layout_gravity = "bottom"
así como esto
fuente
Como no encontré por qué ocurre este comportamiento, he usado el siguiente código:
Básicamente, tengo que calcular manualmente el ancho de mi tabLayout y luego configuro el Modo de pestaña dependiendo de si el tabLayout encaja en el dispositivo o no.
La razón por la que obtengo el tamaño del diseño de forma manual es porque no todas las pestañas tienen el mismo ancho en el modo Desplazable, y esto podría provocar que algunos nombres usen 2 líneas como me sucedió en el ejemplo.
fuente
Mira android-tablayouthelper
fuente
Esta es la solución que usé para cambiar automáticamente entre
SCROLLABLE
yFIXED
+FILL
. Es el código completo para la solución @ Fighter42:(El siguiente código muestra dónde colocar la modificación si ha utilizado la plantilla de actividad con pestañas de Google)
Diseño:
Si no necesita llenar el ancho, es mejor usar la solución @karaokyo.
fuente
Creé una clase AdaptiveTabLayout para lograr esto. Esta fue la única forma que encontré para resolver el problema, responder la pregunta y evitar / solucionar problemas que otras respuestas aquí no hacen.
Notas:
MODE_SCROLLABLE
pero no hay suficiente espacio paraMODE_FIXED
. Si no maneja este caso, sucederá en algunos dispositivos, verá diferentes tamaños de texto o dos líneas de texto en algunas pestañas, lo que se ve mal.wrap_content
en xml. No establezca ningún modo o gravedad en el xml.AdaptiveTabLayout.java
Y esta es la clase DeviceUtils:
Ejemplo de uso:
Esencia
Problemas / Solicite ayuda:
Logcat:
No estoy seguro de cómo solucionarlo. ¿Alguna sugerencia?
fuente
fuente
Este es el único código que funcionó para mí:
Las DisplayMetrics se pueden recuperar usando esto:
Y su TabLayout XML debería verse así (no olvide establecer tabMaxWidth en 0):
fuente
Todo lo que necesita es agregar lo siguiente a su TabLayout
Entonces tendrás:
fuente
Resolví esto usando lo siguiente
fuente
Ejemplo muy simple y siempre funciona.
fuente
Mi solucion final
fuente