不幸的是,我认为这是不可能的。原因如下:和你一样,我尝试使用 a TextView
centered in aRelativeLayout
作为我的选项卡使用ActionBar.Tab.setCustomView()
方法的自定义视图。我使用android:layout_width="fill_parent"
and android:layout_height="fill_parent"
,RelativeLayout
所以通常TextView
应该以它为中心。所以我只尝试了一个TextView
没有包裹的RelativeLayout
像这样:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tab_title"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:gravity="center"
android:text="TAB_TITLE" />
所以通常TextView
应该完全填充选项卡并且文本应该在其中居中。然而情况仍然不是这样:文本仍然没有垂直居中。所以我决定添加android:background="#ffffff"
到,TextView
这样我就可以看到发生了什么。感谢背景,我意识到该ActionBar.Tab.setCustomView()
方法没有为选项卡设置自定义布局,而是在我们无权访问的另一个布局中设置自定义视图(AFAIK)。这是有道理的,android:layout_width="fill_parent"
并且android:layout_height="fill_parent"
在我中被忽略,TextView
因为我null
在扩展选项卡布局时用作父级。因此,为了使文本居中,TextView
我以编程方式设置了TextView
到一个非常高的值,所以它填充了它的父级。然后文本垂直居中。请注意,您也可以使用顶部填充来创建相同的效果。这是我的代码:
custom_tab.xml:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tab_title"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:gravity="center"
android:text="TAB_TITLE" />
在我的活动中设置自定义视图的代码:
for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
Tab tab = actionBar.newTab();
TextView customTabView = (TextView)getLayoutInflater().inflate(R.layout.custom_tab, null);
customTabView.setText(mSectionsPagerAdapter.getPageTitle(i));
// set the height to a really high value to fill the parent
customTabView.setHeight(999);
tab.setCustomView(customTabView);
tab.setTabListener(this);
actionBar.addTab(tab);
}
如果有人知道如何访问设置自定义视图的父视图,请告诉我。希望这可以帮助。