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.
- Insignia en Android TabHost
- Android Exception: ¿Te olvidaste de llamar a 'public void setup (LocalActivityManager activityGroup)'
- Problema al mostrar ProgressDialog dentro de la actividad de la ficha anidada
- Android Fragment, No se encontró ninguna vista para id dentro de TabHost
- Cambiar de TabHost a Fragmentos con Viewpager: Donde poner todo mi código
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: 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.
- ScrollView sobre el tabhost
- TabHost and tabWidget icon problema
- Comportamiento de menú de opciones extraño en Android TabActivity
- Android TabHost dentro de Fragmento
- Deshabilitar las teclas DPAD en android
- Reemplazar un fragmento a otro fragmento en el TabHost
- Actividad de Android Refresh cuando vuelve a ella
- Android - TabActivity con animación de Transición
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);
- ShareActionProvider – setShareIntent para la aplicación de dibujo
- ¿Cómo recibe una llamada saliente en un receptor de difusión