2011-01-21 13 views
1

自分のカスタムフォントを使用するカスタムテキストビューを実装しようとしています。カスタムフォントを使用したカスタムテキストビュー

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()を使用する以外に選択肢はありませんか?

答えて

1

ああ、私は悪いですが、実際にフォントを変更します。

Eclipseのプレビューには表示されませんでしたが、エミュレータには表示されます。

問題を解決しました。

9

onDrawメソッドが呼び出されるたびに新しいTypefaceオブジェクトを作成することは非常に悪いことです。フォントの設定などは、クラスコンストラクターで行う必要がありますが、ビューを作成するたびに行う必要はありません。

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メソッドをオーバーライドして、カスタムフォントを再度設定することができます。

関連する問題