工具栏Android L自定义TextView字体不适用

时间:2015-02-27 15:03:11

标签: android android-layout textview toolbar

我在android中的新工具栏有问题。

我有类似的布局:

<android.support.v7.widget.Toolbar
    android:id="@+id/tlb_wineoox_login"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:elevation="1dp"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary">

    <al.eng.utils.TextOratorStdMedium
        android:id="@+id/txt_home_acitivity_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:text="@string/app_name"
        android:layout_gravity="left"
        android:textColor="#3f3434"
        android:textSize="@dimen/tetembedhjet_sp" />
</android.support.v7.widget.Toolbar>

自定义TextView的类是这样的:

public class TextOratorStdMedium extends TextView {

    public TextOratorStdMedium(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(context);
    }

    public TextOratorStdMedium(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public TextOratorStdMedium(Context context) {
        super(context);
        init(context);
    }

    private void init(final Context context) {
        Typeface tf = Typeface.createFromAsset(context.getAssets(),"fonts/Orator-Std-Medium.ttf");
                setTypeface(tf);

    }
}

这样我的代码似乎不会改变字体类型。但是如果我使用一个等待一秒钟的线程来自定义文本视图,那么在更改字体之前它会起作用:

public class TextOratorStdMedium extends TextView {

    public TextOratorStdMedium(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(context);
    }

    public TextOratorStdMedium(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public TextOratorStdMedium(Context context) {
        super(context);
        init(context);
    }

    private void init(final Context context) {
        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                Typeface tf = Typeface.createFromAsset(context.getAssets(),"fonts/Orator-Std-Medium.ttf");
                setTypeface(tf);
            }
        }, 1000);
    }
}

因此看起来工具栏在创建后会以某种方式重写自定义textview的类型面。根本没有应用任何风格。这怎么可能?除了创建一个新线程并等待一些时刻,我们还有其他解决方案吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

老实说,这看起来很奇怪。也许您可以尝试一些View生命周期方法。尝试覆盖onMeasure(),onSizeChanged()或onAttachedToWindow(),但要注意递归调用。