How do I change the background of an Android tab widget? How do I change the background of an Android tab widget? android android

How do I change the background of an Android tab widget?


This will set your tab colors:

public static void setTabColor(TabHost tabhost) {    for(int i=0;i<tabhost.getTabWidget().getChildCount();i++) {        tabhost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#FF0000")); //unselected    }    tabhost.getTabWidget().getChildAt(tabhost.getCurrentTab()).setBackgroundColor(Color.parseColor("#0000FF")); // selected}

and if you put it within the onTabChangedListener(), it will keep the correct color for selected tabs.


As mbaird mentioned, the better solution is to use background with selector, so you don't have to check onTabChanged and do manual update. The minimal code is here:

private void initTabsAppearance(TabWidget tabWidget) {    // Change background    for(int i=0; i < tabWidget.getChildCount(); i++)        tabWidget.getChildAt(i).setBackgroundResource(R.drawable.tab_bg);}

Where tab_bg is an xml drawable with selector:

<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>

For the full Tab customization I will add the code for changing tab text style using custom theme. Add this to 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>

To use this theme, define it in AndroidManifest.xml:

<application android:theme="@style/MyCustomTheme">

And now you have tab widgets with custom background and custom text style.


What if you register for TabHost.OnTabChanged events and call mTabHost.getCurrentTabView() to get the View, then view.setBackgroundResource()?