¿Cómo establecer el divisor entre tabs en TabLayout de la biblioteca de soporte de diseño?

Estoy usando el nuevo android.support.design.widget.TabLayout de la biblioteca v7-appcompat , y encontré un problema, no hay forma de establecer el divisor entre las tabs, no sé si lo hay.

He configurado correctamente el adaptador de buscapersonas y las tabs se ven bien, pero no puedo configurar el divisor entre las tabs.

Quiero este tipo de tabs

 Tab1 | Tab2 | Tab3 

pero actualmente está mostrando

 Tab1 Tab2 Tab3 

Mi xml es

        

Estoy agregando tabs por esto

 viewPager = (ViewPager) findViewById(R.id.viewpager); viewPager.setOffscreenPageLimit(2); adapter = new TabAdapterLoginActivity(getSupportFragmentManager(), titles); viewPager.setAdapter(adapter); tabLayout = (TabLayout) findViewById(R.id.tablayout); tabLayout.setupWithViewPager(viewPager); 

Hay una forma de agregar divisor usando el método Tab setCustomView:

 TabLayout tabLayout = (TabLayout) findViewById(R.id.tablayout); tabLayout.setupWithViewPager(viewPager); for (int i = 0; i < tabLayout.getTabCount(); i++) { TabLayout.Tab tab = tabLayout.getTabAt(i); RelativeLayout relativeLayout = (RelativeLayout) LayoutInflater.from(this).inflate(R.layout.tab_layout, tabLayout, false); TextView tabTextView = (TextView) relativeLayout.findViewById(R.id.tab_title); tabTextView.setText(tab.getText()); tab.setCustomView(relativeLayout); tab.select(); } 

Diseño personalizado de tabulación con divisor (tab_layout.xml):

        

Establezca el relleno horizontal de la pestaña 0dp en 0dp :

  

Y un selector para el color del texto del título de la pestaña cuando se selecciona (tab_item_selector.xml):

        

TabLayout es en realidad HorizontalScrollView y su primer hijo es LinearLayout .

Así que solo use el código a continuación para agregar divisores

  View root = tabLayout.getChildAt(0); if (root instanceof LinearLayout) { ((LinearLayout) root).setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); GradientDrawable drawable = new GradientDrawable(); drawable.setColor(getResources().getColor(R.color.separator)); drawable.setSize(2, 1); ((LinearLayout) root).setDividerPadding(10); ((LinearLayout) root).setDividerDrawable(drawable); } 

Debajo está la captura de pantalla de muestra

Pantalla 1 enter image description here

Pantalla 2 enter image description here

Hola, puedes probar esto como una solución alternativa a lo que hice de la siguiente manera:

1-crea tablayout normal.

2-hacer el modo MODE_FIXED

2-agregándolo en framellayout y encima agregue el diseño lineal horizonytal.

3-agregue botones en el diseño horizontal como el número de sus tabs y haga que los botones sean iguales en tamaño layout_wight = 1 para cada botón.

4: haz que el fondo de los botones sea transparente.

3-agregue spertator entre los botones en el diseño horizinoal linearlayout mediante view o anyview y especifique el ancho como 0.5dp o lo que sea grueso que desee.

4-puede agregar sus clics en los botones o cambiar el botón a cualquier otra vista que no maneje el clic, de modo que la pestaña debajo de ella tomará la acción de hacer clic :).

pueden ser soluciones feas, pero funciona perfecto y hace el trabajo

Otra sugerencia si desea cambiar el fondo de la pestaña seleccionada puede hacer que la altura del indicador en estilo tablayout sea igual a la altura real del tablayout.

                  

y esto es por estilo

   

No creo que sea posible, a menos que durante la creación de la pestaña especifique una vista personalizada y agregue su divisor, por ejemplo; un TextView y explícitamente TextView.setCompoundDrawablesWithIntrinsicBounds(0, 0,(int)id_of_a_divider, 0);

como si tratara de detectar si es la primera Tab ,

 if(firstTab){ tabLayout.getTabAt(0).getCustomView() .setCompoundDrawablesWithIntrinsicBounds(0, 0,(int)id_of_a_divider, 0); //some little casting }else if(lastTab){ //dont get any tabLayout.getTabAt(index).getCustomView() .setCompoundDrawablesWithIntrinsicBounds(0,0,0, 0); else{ //the rest takes two sides, tabLayout.getTabAt(index).getCustomView() .setCompoundDrawablesWithIntrinsicBounds((int)id_of_a_divider , 0,(int)id_of_a_divider, 0); 

espero que tengas mi idea

No es mejor, pero la forma alternativa que utilicé para el actual.

En Main.Xml

  

Estoy usando fragmento y hago en onCreate() como

 if (savedInstanceState == null) { replaceFragment(fragmentOne); } 

Establecer pestaña

configuración de vacío privadaTabLayout () {

  fragmentOne = new FragmentOne(); fragmentTwo = new FragmentTwo(); allTabs.addTab(allTabs.newTab().setText("CURRENT YEAR"), true); allTabs.addTab(allTabs.newTab().setText("2015")); allTabs.addTab(allTabs.newTab().setText("2014")); allTabs.addTab(allTabs.newTab().setText("2013")); allTabs.addTab(allTabs.newTab().setText("2012")); allTabs.addTab(allTabs.newTab().setText("2011")); //Hide Indicator allTabs.setSelectedTabIndicatorColor(getResources().getColor(android.R.color.transparent)); //Set Custom tab Background for (int i = 1; i < allTabs.getTabCount(); i++) { TabLayout.Tab tab = allTabs.getTabAt(i); RelativeLayout relativeLayout = (RelativeLayout) LayoutInflater.from(getActivity()).inflate(R.layout.tab_layout, allTabs, false); tvTabText = (TextView) relativeLayout.findViewById(R.id.tab_title); View view = (View) relativeLayout.findViewById(R.id.deviderView); tvTabText.setText(tab.getText()); tab.setCustomView(relativeLayout); if (i == 0) { view.setVisibility(View.GONE); tab.select(); } } } 

tab_layout.xml

         

tab_item_selector.xml

        

Por favor, considere como una respuesta opcional siempre.

prueba esto, espero que funcione bien para ti.

tab_activity.xml

          

home_tab.xml

     

intente utilizar este código para establecer el divder en TabHost mTabHost.getTabWidget().setDividerDrawable(R.Color.blue);

Una forma de agregar un divisor personalizado es configurarlo mediante progtwigción:

 tablayout.getTabWidget().setDividerDrawable(R.drawable.yourdivider image name); 

Sin embargo, asegúrese de llamar a esto antes de establecer el contenido de las tabs. Me chocaría si lo llamara después.

también puedes usar esta línea si esto no funciona

 if(Build.VERSION.SDK_INT >= 11) tablayout.getTabWidget().setShowDividers(TabWidget.SHOW_DIVIDER_MIDDLE);