自定义textview使用自定义字体

时间:2011-01-21 08:48:13

标签: android android-widget ondraw drawtext typeface

我正在尝试使用自己的自定义字体来实现自定义文本视图。

有没有办法在做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()来做到这一点?

3 个答案:

答案 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方法并再次设置自定义字体。