Вид, представляющий каждую вкладку, можно изменить с помощью
setIndicator(View)
Я использовал этот код для создания каждой вкладки:
View view = buildTabView(this, "Friday");
TabHost.TabSpec spec = tabHost.newTabSpec("cat1").setIndicator(view).setContent(intent);
tabHost.addTab(spec);
public static LinearLayout buildTabView(Context context, String label){
LayoutInflater li = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final LinearLayout ll = (LinearLayout)li.inflate(R.layout.tab, null);
// the following lines will change the tabs size depending on the label (text) length.
// the longer tab text - the wider tabs
LinearLayout.LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, label.length() + 1);
ll.setLayoutParams(layoutParams);
final TextView tv = (TextView)ll.findViewById(R.id.tab_tv);
tv.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
ll.onTouchEvent(event);
return false;
}
});
tv.setText(label);
return ll;
}
И вот идет макет / вкладка.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/tab_bg_selector"
android:clickable="true"
>
<TextView
android:id="@+id/tab_tv"
android:layout_width="wrap_content"
android:layout_height="33dip"
android:text="Text 1"
android:textStyle="bold"
android:textSize="16dip"
android:gravity="center"
android:textColor="@drawable/tab_color_selector"
android:layout_weight="1.0"
android:clickable="true"
/>
</LinearLayout>
Обратите внимание, что LinearLayout имеет селектор на фоне (для изменения фона, очевидно :)), а TextView имеет селектор на textColor (для изменения цвета текста при выборе / нажатии и т. д.).Таким образом, вы можете сделать текст черным при нажатии клавиши Tab и белым, если его нет:)