Cómo agregar el margen entre las pestañas en TabLayout?
¿Hay una manera de agregar el margen entre las lengüetas en un TabLayout? He intentado con el uso de un estilo personalizado para Widget.Design.TabLayout , pero hay propiedades relacionadas sólo con relleno, pero sin márgenes.
- Mostrar teclado virtual en android TabLayout
- TabLayout dentro de la barra de herramientas
- TabLayout seleccionado El icono Tab no está seleccionado al iniciar:
- TabLayout con viewpager no desplazamiento suave
- Fragmento en TabLayout sólo carga cuando el usuario desliza Android
- Android Tab Layout inside Fragmento no carga el contenido de la pestaña
- Pestaña blanca con texto oscuro
- ¿Cómo mostrar el contador de notificaciones no leído en Tabs dentro de TabLayout?
- Centro de la pestaña activa dentro de TabLayout
- Cambiar el color de fondo de una pestaña en TabLayout (biblioteca de soporte de diseño de Android) no ocupa todo el espacio de tabulación
- Barra de herramientas y TabLayout no son visibles en dispositivos Android 4.4
- Cómo reemplazar fragmento a otro fragmento en TabLayout y ViewPager
- ¿Cómo se crea un Android View Pager con un indicador de puntos?
Ok compañeros, después de pasar 2-3 horas en que finalmente encontré una solución.
Si está utilizando TabLayout no hay manera de agregar márgenes a las pestañas mediante el uso de estilos y así sucesivamente. (Como @Conectando la vida con Android antes)
Pero, puedes hacerlo escribiendo un código Java. Todo en todo su código debe parecer similar a ésa:
for(int i=0; i < mTabLayout.getTabCount(); i++) { View tab = ((ViewGroup) mTabLayout.getChildAt(0)).getChildAt(i); ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) tab.getLayoutParams(); p.setMargins(0, 0, 50, 0); tab.requestLayout(); }
Con el fin de obtener cada ficha como una vista tenemos que primero obtener el contenedor que los contiene. En este caso, TabLayout utiliza un SlidingTabStrip como un contenedor para las fichas. El SlidingTabStrip es el primer hijo del TabLayout:
View tab = ((ViewGroup) mTabLayout.getChildAt(0))
Y después de este pequeño detalle, todo es bastante sencillo.
Así se establece el margen para cuatro pestañas diferentes. Puede cambiar los valores de la función setMargins (v1, v2, v3, v4) para obtener un ajuste adecuado para el número de fichas con las que está trabajando. Espero que esto ayude. Tenga en cuenta que tabHost es el objeto de TabHost que aloja diferentes pestañas con las que está trabajando.
Display display = getWindowManager().getDefaultDisplay(); int width = display.getWidth(); View currentView; for(int i=0;i<tabHost.getTabWidget().getChildCount();i++) { //This code removes divider between tabs tabHost.getTabWidget().setDividerDrawable(null); tabHost.getTabWidget().getChildAt(i).setLayoutParams(new LinearLayout.LayoutParams((width/8)-2,50)); currentView = tabHost.getTabWidget().getChildAt(i); LinearLayout.LayoutParams currentLayout = (LinearLayout.LayoutParams) currentView.getLayoutParams(); currentLayout.setMargins(30, 5, 80, 0); }
@Todor Kostov respondió bien, pero el centro de las pestañas se escapó porque la última pestaña también tiene margen.
Así que utilice mTabLayout.getTabCount() - 1
lugar de simplemente mTabLayout.getCodeCount()
.
for(int i=0; i < mTabLayout.getTabCount() - 1; i++) { View tab = ((ViewGroup) mTabLayout.getChildAt(0)).getChildAt(i); ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) tab.getLayoutParams(); p.setMargins(0, 0, 50, 0); tab.requestLayout(); }