我正在试图找出如何将操作栏选项卡上的字体更改为某些自定义字体,而对于我的生活,我无法弄明白。看起来似乎没有办法访问Tab对象的底层TextView。
其他解决方案当然是定义我自己的自定义ActionBar选项卡布局,并将其设置为ActionBar.Tab对象的自定义视图,但这似乎也非常棘手。
如果我使用以下XML布局文件作为我的自定义标签布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="center_vertical"
android:orientation="vertical" >
<TextView
android:id="@+id/text_tab"
style="@style/Widget.Sherlock.ActionBar.TabText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"/>
</LinearLayout>
操作栏选项卡似乎忽略了我的所有重力请求,并将文本放在选项卡视图的顶部 - 这与标准操作栏选项卡完全不同,默认情况下文本垂直居中。
如果有人可以建议a)为操作栏选项卡提供自定义字体的更简单方法,或b)自定义选项卡视图的正确布局,我将非常感激。
感谢。
答案 0 :(得分:3)
不幸的是,我认为不可能。这就是为什么:
与您一样,我尝试使用TextView
中的RelativeLayout
作为我的标签的自定义视图,使用ActionBar.Tab.setCustomView()
方法。我在android:layout_width="fill_parent"
上使用了android:layout_height="fill_parent"
和RelativeLayout
,因此TextView
通常应该以{{1}}为中心。所以我尝试只用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"
应该完全填充Tab,文本应该在其中居中。然而,情况仍然不是这样:文本仍然没有垂直居中。所以我决定将TextView
添加到ActionBar.Tab.setCustomView()
,以便我可以看到发生了什么。由于背景知识,我意识到android:layout_width="fill_parent"
方法没有为选项卡设置自定义布局,而是在我们无法访问的另一个布局(AFAIK)中设置自定义视图。在android:layout_height="fill_parent"
中忽略TextView
和null
是有道理的,因为我在使用标签布局时使用TextView
作为父级。因此,要将TextView
中的文本居中,我以编程方式将<?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" />
的高度设置为一个非常高的值,以便填充其父级。然后文本垂直居中。请注意,您还可以使用顶部填充来创建相同的效果。这是我的代码:
custom_tab.xml:
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);
}
我的活动中设置自定义视图的代码:
{{1}}
如果有人知道如何访问设置自定义视图的父视图,请告诉我。希望这会有所帮助。
答案 1 :(得分:0)
使用相对布局。线性布局不要使用 android:layout_gravity =“center_vertical”....它只允许使用中心水平..
如果您使用相对布局,则可以使用
android:layout_centerInParent="true"
答案 2 :(得分:0)
我认为你应该将layout_width和layout_height设置为“fill_parent”而不是wrap_content 这样:
android:layout_width="fill_parent"
android:layout_height="fill_parent"
以便您的文字可以居中。
答案 3 :(得分:0)
首先看一下这个例子: [http://www.androidhive.info/2013/10/android-tab-layout-with-swipeable-views-1/][1]
然后创建一个布局,并使用以下代码将其命名为tab_title:
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/action_custom_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="My Custom title"
android:textColor="#fff"
android:textSize="18sp"
android:paddingTop="5dp" />
然后只需在Androidhive项目的MainActivity的onCreate()方法中,只需更改:
// Adding Tabs
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener(this));
}
要:
// Adding Tabs
for (String tab_name : tabs) {
Tab tab = actionBar.newTab();
TextView customTabView = (TextView)getLayoutInflater().inflate(R.layout.tab_title, null);
customTabView.setText(tab_name);
Typeface typface2=Typeface.createFromAsset(getAssets(),"fonts/titr.TTF");
customTabView.setTypeface(typface2);
tab.setTabListener(this);
tab.setCustomView(customTabView);
actionBar.addTab(tab);
}
(无需说你必须将fonts / titr.TTF更改为资产目录和文件名) 联合它!!