Comme l'a mentionné mbaird, la meilleure solution est d'utiliser arrière-plan avec le sélecteur, donc vous n'avez pas besoin de vérifier onTabChanged
et faire une mise à jour manuelle. Le code minimal est ici :
private void initTabsAppearance(TabWidget tabWidget) {
// Change background
for(int i=0; i < tabWidget.getChildCount(); i++)
tabWidget.getChildAt(i).setBackgroundResource(R.drawable.tab_bg);
}
Où tab_bg
est un dessinateur xml avec un sélecteur :
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@drawable/tab_bg_selected" />
<item android:drawable="@drawable/tab_bg_normal" />
</selector>
Pour la personnalisation complète de l'onglet, je vais ajouter le code pour modifier style de texte de l'onglet en utilisant un thème personnalisé. Ajoutez ceci à styles.xml
:
<resources>
<style name="MyCustomTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:tabWidgetStyle">@style/CustomTabWidget</item>
</style>
<style name="CustomTabWidget" parent="@android:style/Widget.TabWidget">
<item name="android:textAppearance">@style/CustomTabWidgetText</item>
</style>
<style name="CustomTabWidgetText" parent="@android:style/TextAppearance.Widget.TabWidget">
<item name="android:textSize">12sp</item>
<item name="android:textStyle">bold</item>
</style>
</resources>
Pour utiliser ce thème, définissez-le dans AndroidManifest.xml :
<application android:theme="@style/MyCustomTheme">
Et maintenant vous avez des widgets d'onglets avec arrière-plan personnalisé y style de texte personnalisé .