Как упоминал mbaird, лучшее решение - использовать background с селектором, поэтому вам не нужно проверять onTabChanged
и выполнять обновление вручную. Минимальный код здесь:
private void initTabsAppearance(TabWidget tabWidget) {
// Change background
for(int i=0; i < tabWidget.getChildCount(); i++)
tabWidget.getChildAt(i).setBackgroundResource(R.drawable.tab_bg);
}
Где tab_bg
- это отрисовываемый файл XML с селектором:
<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>
Для полной настройки вкладки я добавлю код для изменения стиля текста вкладки с помощью пользовательской темы. Добавьте это к 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>
Чтобы использовать эту тему, определите ее в AndroidManifest.xml:
<application android:theme="@style/MyCustomTheme">
И теперь у вас есть виджеты со вкладками с пользовательским фоном и пользовательским стилем текста .