I found some solution myself. These are not pure ABS resources, but use minimal additional things:
Almost the same as the ABS selector except
<item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/abs__ab_transparent_light_holo" />
tab_indicator_compat_holo.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/abs__ab_transparent_light_holo" /> <item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/abs__tab_selected_holo" /> <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/abs__list_focused_holo" /> <item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/abs__tab_selected_focused_holo" /> <item android:state_focused="false" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/abs__list_pressed_holo_dark" /> <item android:state_focused="false" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/abs__tab_selected_pressed_holo" /> <item android:state_focused="true" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/abs__tab_unselected_pressed_holo" /> <item android:state_focused="true" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/abs__tab_selected_pressed_holo" />
Activities
private void initTabs(){ TabHost tabHost = (TabHost)getView().findViewById(android.R.id.tabhost); tabHost.setup(); TabSpec podcasts_all = tabHost.newTabSpec("tab1"); TabSpec podcasts_downloaded = tabHost.newTabSpec("tab2"); TabSpec podcasts_favorite = tabHost.newTabSpec("tab3"); if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB){ //set divider drawable tabHost.getTabWidget().setDividerDrawable(com.actionbarsherlock.R.drawable.abs__list_divider_holo_light); //set tab titles with custom view podcasts_all.setIndicator(customTabTextView(getSherlockActivity().getString(R.string.PodcastManager_All_Title))); podcasts_downloaded.setIndicator(customTabTextView(getSherlockActivity().getString( R.string.PodcastManager_Downloaded_Title))); podcasts_favorite.setIndicator(customTabTextView(getSherlockActivity().getString( R.string.PodcastManager_Favorite_Title))); }else{ //set tab titles podcasts_all.setIndicator(getSherlockActivity().getString(R.string.PodcastManager_All_Title)); podcasts_downloaded.setIndicator(getSherlockActivity().getString( R.string.PodcastManager_Downloaded_Title)); podcasts_favorite.setIndicator(getSherlockActivity().getString(R.string.PodcastManager_Favorite_Title)); } tabHost.addTab(podcasts_all); tabHost.addTab(podcasts_downloaded); tabHost.addTab(podcasts_favorite); //fill background with selector drawable if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB){ setTabsBackground(tabHost); } } private View customTabTextView(String text){ TextView txtTab = new TextView(getActivity()); txtTab.setText(text.toUpperCase()); txtTab.setPadding(0, 5, 0, 0); txtTab.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12); txtTab.setTextColor(Color.DKGRAY); txtTab.setGravity(Gravity.CENTER); txtTab.setTypeface(Typeface.MONOSPACE, Typeface.BOLD); txtTab.setHeight(34); return txtTab; } private void setTabsBackground(TabHost tabHost) { View v; int count = tabHost.getTabWidget().getTabCount(); for (int i = 0; i < count; i++) { v = tabHost.getTabWidget().getChildTabViewAt(i); v.setBackgroundResource(R.drawable.tab_indicator_compat_holo); ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) v.getLayoutParams(); //Fix margins in 2.x, by default there is -2 params.setMargins(0, 0, 0, 0); } }
source share