正如 maird 提到的,更好的解决方案是使用 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">
现在您有了带有自定义背景和自定义文本样式的标签小部件。