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

4

3 に答える 3

9

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

于 2011-03-06T21:07:40.287 に答える
1

残念ながら、実際にはフォントが変更されます。

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

問題が解決しました。

于 2011-01-21T09:41:44.837 に答える
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を作成し、テキストビューの作成中にカスタムフォントを設定します。
プログラムでテキストの外観を設定しようとすると、カスタムフォントがリセットされます。したがって、メソッドをオーバーライドしてsetTextAppearance、カスタムフォントを再度設定できます。

于 2014-06-18T05:48:30.290 に答える