我想我已经为你找到了一个起点,但有点复杂。
使用以下代码设置操作栏,您可以设置选项卡以使用自定义外观:
//...somewhere in oncreate
ActionBar bar = getActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.Tab tab1 = bar.newTab();
TextView tv1 = createTab("Tab 1", R.drawable.firsttabdrawable);
tab1.setCustomView(tv1);
tab1.setTabListener(this);
ActionBar.Tab tab2 = bar.newTab();
tab2.setCustomView(createTab("Tab 2", R.drawable.secondTabDrawable));
tab2.setTabListener(this);
ActionBar.Tab tab3 = bar.newTab();
tab3.setCustomView(createTab("Tab 3", R.drawable.thirdTabDrawable));
tab3.setTabListener(this);
ActionBar.Tab tab4 = bar.newTab();
tab4.setCustomView(createTab("Tab 4", R.drawable.fourthTabDrawable));
tab4.setTabListener(this);
bar.addTab(tab1);
bar.addTab(tab2);
bar.addTab(tab3);
bar.addTab(tab4);
createTab方法如下:
private TextView createTab(String titleText, int tabBackgroundDrawableId)
{
TextView tv = new TextView(this);
//set caption and caption appearance
tv.setTextAppearance(this, R.style.MyDefaultTabTextAppearance);
tv.setText(titleText);
//set appearance of tab
tv.setBackgroundResource(tabBackgroundDrawableId);
tv.setLayoutParams(new android.view.ViewGroup.LayoutParams(android.view.ViewGroup.LayoutParams.MATCH_PARENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
//Make sure all tabs have the same height
tv.setMaxLines(2);
tv.setMinLines(2);
return tv;
}
然而,操作栏似乎将选项卡视图添加到添加填充的父视图中,因此对于每个视图,您都需要将其删除。我在第一个代码块之后的 oncreate 中这样做了,如下所示:
View view = (View) tv1.getParent();
LinearLayout.LayoutParams lp = (android.widget.LinearLayout.LayoutParams)view.getLayoutParams();
view.setPadding(0, 0, 0, 0);
view.setLayoutParams(lp);
您可能会找到一种更优雅/直接的方法来执行此操作,但作为起点,我认为值得发布。
希望这可以帮助。
ADDED:
还值得指出的是,如果您的选项卡有更复杂的布局,您可以在 createTab 方法中扩充布局 xml 文件。例如,使用以下 xml (mytab.xml):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tabIcon"/>
<TextView style="@style/MyDefaultTabTextAppearance"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/tabIcon"
android:minLines="2"
android:maxLines="2"
android:id="@+id/tabText"/>
</RelativeLayout>
创建选项卡变为:
private RelativeLayout createTab(String titleText, int tabBackgroundDrawableId)
{
RelativeLayout rl = (RelativeLayout)this.getLayoutInflater().inflate(R.layout.mytab, null, false);
//set appearance of tab
rl.setBackgroundResource(tabBackgroundDrawableId);
TextView tv = (TextView)rl.findViewById(R.id.tabText);
//set caption
tv.setText(titleText);
ImageView iv = (ImageView)rl.findViewById(R.id.tabIcon);
iv.setImageResource(R.drawable.ic_launcher);//or supply unique drawable to method?
return rl;
}