3

私の希望する出力:

カスタムフォントを使用したウィジェット(ホーム画面ウィジェット)のテキスト

私の問題:

  • ウィジェットのテキストビューでカスタム フォントを使用できません (TextView はウィジェットで直接アクセスできないため、リモートビューを使用して使用する必要があります。)

そこで、イメージビューを使用し、キャンバスを使用してビットマップにテキストを描画し、このビットマップをイメージビューに設定することを考えました。これまでのところすべてが機能していますが、2 つだけです。

知らない、

  • テキストを中央に垂直および水平に設定するにはどうすればよいですか? (タテヨコとは、タテヨコ中央にあるという意味です)

  • ビットマップのスペース全体をテキストで埋める方法は?

次のコードを使用して、ウィジェットにテキストを表示しています。

Bitmap bitmap = Bitmap.createBitmap(200, 200, Config.ARGB_8888);

Canvas canvas = new Canvas(bitmap);

Paint paint = new Paint();

paint.setColor(Color.YELLOW);
canvas.drawPaint(paint);

paint.setColor(Color.GREEN);
paint.setStyle(Style.FILL);

canvas.drawText("Test", 50, 50, paint);

以下は出力です。 ここに画像の説明を入力

4

3 に答える 3

1

1-ウィジェットのテキストビューでフォントランタイムを設定する

I dont know that either

2-テキストを中央に配置してコンテナを埋めるように設定する

Please see the following code:

 float size = 1.0f;

 Bitmap bitmap = Bitmap.createBitmap(200, 200, Config.ARGB_8888);

 Canvas canvas = new Canvas(bitmap);

 Paint paint = new Paint();

 paint.setColor(Color.YELLOW);
 canvas.drawPaint(paint);

 paint.setColor(Color.GREEN);
 paint.setStyle(Style.FILL);

 Rect rect = new Rect();
 paint.getTextBounds("Test", 0, 4, rect);

 float width = 1.0f;

 while (width<200 && rect.height()<200)
 {
  size++;
  paint.setTextSize(size);

  width = paint.measureText("Test");
  paint.getTextBounds("Test", 0, 4, rect);

 }

 size--;
 paint.setTextSize(size);

 canvas.drawText("Test", 100-width/2, 100+rect.height()/2, paint);

スクリーンショットを添付しようとしましたが、私は新しいユーザーなので追加できません.(ルーキー:P)

ありがとう、

于 2012-05-10T11:12:13.380 に答える
0
  1. ウィジェットのテキストビューでカスタムフォントを使用できません

    TextView tv=(TextView)findViewById(R.id.custom);
    Typeface face=Typeface.createFromAsset(getAssets(),"fonts/Verdana.ttf");
    tv.setTypeface(face);
    

    キャンバスで同じものを使用したい場合は、使用しているobjをペイントするように面を設定します。

  2. テキストを中央に垂直方向と水平方向に設定するにはどうすればよいですか?

  3. キャンバスで、paintobjによる描画テキストとして。次に、paintobjを設定できます

    mPaint.setTextAlign(Align.CENTER);
    

または、左または右に配置できます。テキストを描画するため、垂直方向または水平方向に設定することはできません。垂直方向または水平方向に好きなように描画できます。

例テキストSAMを描画する必要があります

  1. 水平方向はcanvas.drawText( "SAM"、50、50、paint);を意味します。

  2. 本当に意味する

           canvas.drawText("S", 50, 50, paint);
           canvas.drawText("A", 50, 51, paint);
           canvas.drawText("M", 50, 52, paint);
    

    注:次に、右または左のmPaint.setTextAlign(Align.CENTER)とは何かを考えるかもしれません。たとえば、100の幅があり、20ピクセルから50ピクセルで書き込みを開始した場合、20から50ピクセルの中心を維持しようとします。100pxの幅の中央にありません。

  3. ビットマップのスペース全体を埋めるようにテキストを作成するにはどうすればよいですか?

Canvasでは自分自身で行う必要があるため、ここにはラップコンテンツはありません。

したがって、最初にuのスペースを確認し、指定されたx値とy値を入力し、テキストサイズを事前に変更します。

于 2012-05-10T09:30:33.893 に答える
0

こんにちは TextView でカスタム フォントを使用できない理由: TextView をサブクラス化して、これを 3 つの既定のテキスト ビュー コンストラクターに追加できると思います

  if (!isInEditMode()) {
              Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/ds_digib.ttf");
              setTypeface(tf);
    }

テキストを縦横に配置するには

このリンクを参照してください

ここに画像の説明を入力

これが問題の解決に役立つことを願っています

于 2012-05-10T09:31:02.600 に答える