I need to change the tab text color dynamically. When the tab is selected text should be yellow and when unselected it should be black. I tried some tricks, but all I achieved was to change the ActionBar title color...
My Java code setting up the tabs:
private void setSortTabs() {
//getting the action bar from the MainActivity
final ActionBar actionBar = ((ActionBarActivity) getActivity()).getSupportActionBar();
//adding tabs to the action bar
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//tab sort by name
ActionBar.Tab tabSortByName = actionBar.newTab();
tabSortByName.setText(LABEL_BY_NAME_DESC);
ActionBar.TabListener sortByNameTabListener = new ActionBar.TabListener() {
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
sortByName(tab);
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
sortByNameTabUnselected(tab);
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
sortByName(tab);
}
};
tabSortByName.setTabListener(sortByNameTabListener);
actionBar.addTab(tabSortByName);
//tab sort by date
ActionBar.Tab tabSortByDate = actionBar.newTab();
tabSortByDate.setText(LABEL_BY_DATE_ASC);
actionBar.setStackedBackgroundDrawable(new ColorDrawable(Color.BLUE));
ActionBar.TabListener sortByDateTabListener = new ActionBar.TabListener() {
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
sortByDate(tab);
//Toast.makeText(getActivity().getApplicationContext(),Integer.toString(tab.getPosition()), 1).show();
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
sortByDateTabUnselected(tab);
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
sortByDate(tab);
}
};
tabSortByDate.setTabListener(sortByDateTabListener);
actionBar.addTab(tabSortByDate);
}
My styles.xml code:
<style name="AppTheme"
parent="Theme.Base.AppCompat.Light">
<item name="android:actionBarStyle" tools:ignore="NewApi">@style/MyActionBar</item>
<item name="android:actionBarTabTextStyle">@style/TabTextStyle</item>
<item name="android:actionBarTabStyle">@style/TabBackgroundStyle</item>
<item name="android:actionBarTabBarStyle">@style/TabBarBackgroundStyle</item>
<!-- Support library compatibility -->
<item name="actionBarStyle">@style/MyActionBar</item>
<item name="actionBarTabTextStyle">@style/TabTextStyle</item>
<item name="actionBarTabStyle">@style/TabBackgroundStyle</item>
<item name="actionBarTabBarStyle">@style/TabBarBackgroundStyle</item>
</style>
<!-- ActionBar styles -->
<style name="MyActionBar"
parent="@style/Widget.AppCompat.Light.ActionBar">
<item name="android:background">@color/actionBarBackgroundColor</item>
<item name="android:icon">@android:color/transparent</item>
<!-- Support library compatibility -->
<item name="background">@color/actionBarBackgroundColor</item>
<item name="icon">@android:color/transparent</item>
</style>
<style name="TabTextStyle"
parent="@style/Widget.AppCompat.ActionBar.TabText">
<item name="android:textColor">@color/selected_tab_text_color</item>
<item name="android:textSize">20sp</item>
</style>
<style name="TabBackgroundStyle"
parent="@style/Widget.AppCompat.ActionBar.TabView">
<item name="android:background">@color/gray_edit_text</item>
<item name="android:gravity">center</item>
</style>
<style name="TabBarBackgroundStyle"
parent="@style/Widget.AppCompat.ActionBar.TabBar">
<item name="android:background">@color/gray_edit_text</item>
</style>
Current look vs desired look