我在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的类型面。根本没有应用任何风格。这怎么可能?除了创建一个新线程并等待一些时刻,我们还有其他解决方案吗?
谢谢。
答案 0 :(得分:0)
老实说,这看起来很奇怪。也许您可以尝试一些View生命周期方法。尝试覆盖onMeasure(),onSizeChanged()或onAttachedToWindow(),但要注意递归调用。