Я столкнулся с ситуацией, когда макет TabWidget не сделал то, что мне нужно, поэтому я подделал его с помощью ViewFlipper и RadioGroup. Таким образом, я мог бы определить содержимое вкладок (каждое представление в ViewFlipper), используя include (как в ответе Фаррея).
Сами вкладки были RadioButtons в RadioGroup - у вас просто есть OnCheckedChangeListener в вашем коде и соответственно установите дочерний элемент ViewFlipper. Вы можете определить макет RadioButton в формате XML (с текстом, изображениями или чем-либо еще).
Вот псевдо-макет, где вкладки используют изображения:
<LinearLayout>
<ViewFlipper android:id="@+id/viewFlipper">
<include android:id="@+id/tab1Content" layout="@layout/tab1Layout" />
<include android:id="@+id/tab2Content" layout="@layout/tab2Layout" />
<include android:id="@+id/tab3Content" layout="@layout/tab3Layout" />
</ViewFlipper>
<LinearLayout>
<RadioGroup android:id="@+id/radgroup1" android:orientation="horizontal">
<RadioButton android:id="@+id/rad1" android:button="@drawable/tab1" />
<RadioButton android:id="@+id/rad2" android:button="@drawable/tab2" />
<RadioButton android:id="@+id/rad3" android:button="@drawable/tab3" />
</RadioGroup>
</LinearLayout>
</LinearLayout>
А вот и слушатель:
private OnCheckedChangeListener onRadioButtonCheckedChanged = new OnCheckedChangeListener(){
public void onCheckedChanged(RadioGroup group, int checkedId)
{
switch(checkedId)
{
case(R.id.rad2):
viewFlipper.setDisplayedChild(1);
break;
case(R.id.rad3):
viewFlipper.setDisplayedChild(2);
break;
default:
viewFlipper.setDisplayedChild(0);
break;
}
}
};