3

我试图弄清楚如何将操作栏选项卡上的字体更改为一些自定义字体,而对于我的生活,我无法弄清楚。它似乎没有任何方法可以访问 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) 自定义选项卡视图的正确布局,我将不胜感激。

谢谢。

4

4 回答 4

3

不幸的是,我认为这是不可能的。原因如下:和你一样,我尝试使用 a TextViewcentered 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);
}

如果有人知道如何访问设置自定义视图的父视图,请告诉我。希望这可以帮助。

于 2013-11-26T00:06:53.653 回答
0

使用相对布局。线性布局不允许使用 android:layout_gravity="center_vertical".. 它只允许使用中心水平..

如果你使用相对布局,你可以使用

android:layout_centerInParent="true"
于 2013-03-30T00:18:49.980 回答
0

我认为你应该将你的 layout_width 和 layout_height 设置为“fill_parent”而不是 wrap_content 这样:

android:layout_width="fill_parent"
android:layout_height="fill_parent"

以便您的文本可以居中。

于 2013-07-27T01:35:57.480 回答
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更改为你的资产目录和文件名)联合起来!!

于 2014-12-25T08:44:52.843 回答