Separadores de tabulación que no se muestran en ICS

Tengo un problema con .setDividerDrawable () sólo funciona en versiones inferiores a Ice Cream Sandwich. Cuando ejecuto el emulador las pestañas muestran perfectamente, pero no divisor. Al emular versiones inferiores de Android no hay ningún problema, los divisores muestran.

Estoy utilizando este código para crear el TabHost. No tengo ni idea de qué es lo que hace ICS se estremecen.

Manifest.xml

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.sbl.mytabapp" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:debuggable="true" > <activity android:name=".MyTabApp" android:label="@string/app_name" android:theme="@style/MyTabAppTheme" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".Page1"></activity> <activity android:name=".Page2"></activity> <activity android:name=".Page3"></activity> </application> </manifest> 

MyTabApp.java (R.drawable.divider) hace referencia a esta imagen: Introduzca aquí la descripción de la imagen Que es apenas un archivo .jpg ancho de 1px. En ICS no se muestra.

 public class MyTabApp extends TabActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TabHost tabHost = getTabHost(); TabHost.TabSpec spec; Intent intent; tabHost.getTabWidget().setDividerDrawable(R.drawable.divider); intent = new Intent().setClass(this, Page1.class); spec = tabHost.newTabSpec("page1").setIndicator(getLayoutInflater().inflate(R.layout.tab1, null)) .setContent(intent); tabHost.addTab(spec); intent = new Intent().setClass(this, Page2.class); spec = tabHost.newTabSpec("page2").setIndicator(getLayoutInflater().inflate(R.layout.tab2, null)) .setContent(intent); tabHost.addTab(spec); intent = new Intent().setClass(this, Page3.class); spec = tabHost.newTabSpec("page3").setIndicator(getLayoutInflater().inflate(R.layout.tab3, null)) .setContent(intent); tabHost.addTab(spec); tabHost.setCurrentTab(0); } } 

Main.xml

 <?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TabWidget android:id="@android:id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content"/> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> </TabHost> 

Style.xml

 <?xml version="1.0" encoding="utf-8"?> <resources> <style name="MyTabAppTheme" parent="android:style/Theme"> <item name="android:windowNoTitle">true</item> </style> <style name="tablayout" parent="android:style/Theme"> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">match_parent</item> <item name="android:height">48dp</item> <item name="android:gravity">center</item> <item name="android:textColor">@color/font</item> <item name="android:background">@drawable/tabselector</item> </style> <style name="contentlayout" parent="android:style/Theme"> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">match_parent</item> <item name="android:textColor">@color/font</item> <item name="android:background">@color/background</item> </style> </resources> 

Tab1.xml, tab2.xml, tab3.xml contiene el mismo estilo de referencia. Esta es la pestaña 1:

 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tab1" style="@style/tablayout" /> 

Tabselector.xml Los fondos dibujables de la lengüeta son imágenes de fondo 9patch.

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Non focused states --> <item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/normal" /> <item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/selected" /> <!-- Focused states --> <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/normal_focused" /> <item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/selected_focused" /> <!-- Pressed --> <item android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/normal_pressed" /> <item android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/selected_pressed" /> </selector> 

Cómo se ve: Los fondos de la ficha son imágenes de fondo 9patch.
Introduzca aquí la descripción de la imagen

Tuve el mismo problema, finalmente terminé agregando los separadores manualmente. Adición de ImageView entre las pestañas ..

 public class MyTabApp extends TabActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ImageView divider = new ImageView(this); divider.setImageResource(R.drawable.tab_seperator); TabHost tabHost = getTabHost(); TabHost.TabSpec spec; Intent intent; intent = new Intent().setClass(this, Page1.class); spec = tabHost.newTabSpec("page1").setIndicator(getLayoutInflater().inflate(R.layout.tab1, null)) .setContent(intent); tabHost.addTab(spec); tabHost.getTabWidget().addView(divider, LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT); intent = new Intent().setClass(this, Page2.class); spec = tabHost.newTabSpec("page2").setIndicator(getLayoutInflater().inflate(R.layout.tab2, null)) .setContent(intent); tabHost.addTab(spec); } } 

Este comportamiento parece ser un comportamiento predeterminado en temas de tabulación ICS y necesita un trabajo alrededor. Echa un vistazo a esta respuesta , específicamente a la dada por @Janusz, el OP.

Puede probar este código!

 if(Build.VERSION.SDK_INT >= 11) mTabHost.getTabWidget().setShowDividers(TabWidget.SHOW_DIVIDER_MIDDLE); 
  • Android - onTabChanged no se invoca al seleccionar una pestaña diferente
  • Buscar usuarios en el host de pestañas android
  • TabHost con Actividades vs ActionBar con Fragmentos
  • Cambiando dinámicamente los fragmentos dentro de un host de fichas de fragmentos?
  • Android: ¿Cómo cambiar dinámicamente el contenido de la pestaña inflada?
  • Implementación de desplazamiento entre pestañas mediante tab-host en Android
  • Las pestañas TabHost de Android roban el enfoque al utilizar el teclado de hardware
  • ¿Cómo iniciar una actividad con una pestaña específica?
  • Lengüetas de diferentes tamaños en Android
  • El color de TabHost cambió entre las versiones de Android
  • ¿Cómo implementar TabHost efecto deslizante?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.