我正在尝试使用自己的自定义字体来实现自定义文本视图。
有没有办法在做Super.onDraw()之前设置字体?
以便将常用字体替换为我想要使用的自定义字体。
类似的东西:
protected void onDraw(Canvas canvas)
{
Typeface font1 = Typeface.createFromAsset(context.getAssets(), "fonts/myfonts.ttf");
this.setTypeface(font1);
this.setTextSize(18);
super.onDraw(canvas);
}
我知道上面的代码不起作用。
或者我别无选择,只能使用drawText()来做到这一点?
答案 0 :(得分:9)
每次调用onDraw方法时,创建新的Typeface对象是一种非常糟糕的做法。字体设置等内容应该在类构造函数中完成,但不是每次绘制视图时都要完成。
答案 1 :(得分:1)
哦,我的坏,它确实改变了字体。
只是它没有出现在Eclipse上的预览中,但它确实在模拟器上显示。
问题解决了。
答案 2 :(得分:0)
public class CustomTextView extends TextView {
public CustomTextView(Context context, AttributeSet attributes) {
super(context, attributes);
applyCustomFont(context);
}
private void applyCustomFont(Context context) {
TypeFace customTypeFace = Typeface.createFromAsset(context.getAssets(), "custom_font_name");
setTypeface(customTypeFace);
}
@Override
public void setTextAppearance(Context context, int resid) {
super.setTextAppearance(context, resid);
applyCustomFont(context);
}
}
代码段创建自定义TextView
,并在创建textview期间设置自定义字体。
当您尝试以编程方式设置文本外观时,将重置自定义字体。因此,您可以覆盖setTextAppearance
方法并再次设置自定义字体。