如何更改pagertitlestrip的字体

时间:2012-10-14 13:38:05

标签: android android-viewpager

Typeface xyz=Typeface.createFromAsset(view.getContext().getAssets(),
                "fonts/xyz.ttf");
(TextView)abc.setTypeface(xyz);

这是您创建和设置自定义字体的方式。

我需要设置pagertitlestrip的字体/字体,但.setTypeFace没有pagertitlestrip函数。有谁知道我怎么能这样做?

4 个答案:

答案 0 :(得分:9)

PagerTitleStrip实际上是扩展ViewGroup,因此您可以将其子类化并遍历每个子节点以查找需要更改其字体的视图:

public class CustomFontPagerTitleStrip extends PagerTitleStrip {
    public CustomFontPagerTitleStrip(Context context) {
        super(context);
    }
    public CustomFontPagerTitleStrip(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);
        Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/xyz.ttf");
        for (int i=0; i<this.getChildCount(); i++) {
            if (this.getChildAt(i) instanceof TextView) {
                ((TextView)this.getChildAt(i)).setTypeface(tf);
            }
        }
    }
}

唯一的缺点是它会阻止Eclipse显示您的布局。

答案 1 :(得分:2)

显然我没有足够的声誉评论jburns20的答案,但我觉得我的发现将帮助那些遇到他的解决方案的人。

我注意到在尝试jburns20课程后,我的滑动动画存在相当大的延迟。通过traceview,似乎罪魁祸首是重复分配字体资源。在我的使用案例中(我也确定其他许多例子),没有必要为每次迭代重复获取字体资源。

在循环之前移动实例化为我解决了性能问题。为了清楚起见,我在下面转载了我的修改,所有功劳都归功于jburns20

public class CustomFontPagerTitleStrip extends PagerTitleStrip {
    //Moved typeface instantiation here, only required once.
    Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/xyz.ttf");

    public CustomFontPagerTitleStrip(Context context) {
        super(context);
    }
    public CustomFontPagerTitleStrip(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);
        for (int i=0; i<this.getChildCount(); i++) {
            if (this.getChildAt(i) instanceof TextView) {
                ((TextView)this.getChildAt(i)).setTypeface(tf);
            }
        }
    }
}

答案 2 :(得分:1)

如果是自定义字体,请将其放在资产文件夹中并像这样更改。

public class WeeklyFragment extends Fragment{


PagerTitleStrip _Title;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.weekly_fragment, container, false);                   
    _Title = (PagerTitleStrip)rootView.findViewById(R.id.__Weekly_pager_title_strip);
    Typeface font = Typeface.createFromAsset(getActivity().getAssets(), "your font.ttf"); 

    for (int counter = 0 ; counter<_Title.getChildCount(); counter++) {

        if (_Title.getChildAt(counter) instanceof TextView) {
            ((TextView)_Title.getChildAt(counter)).setTypeface(font);
            ((TextView)_Title.getChildAt(counter)).setTextSize(25);
        }
    }

答案 3 :(得分:0)

虽然认为 ViewPager支持android:textAppearance,但您无法以这种方式设置字体。

您可能最好复制PagerTitleStrip代码(在SDK或available online中),将您的分支重构为您自己的软件包,并对其进行修改以适应。或者,查看ViewPagerIndicator库是否有您喜欢的,允许您配置字体。