110

できれば身長も欲しいです。

4

7 に答える 7

213

getTextBounds(String text, int start, int end, Rect bounds)Paint オブジェクトのメソッドを使用できます。が提供するペイント オブジェクトを使用するかTextView、目的のテキストの外観で独自に作成することができます。

Textview を使用すると、次のことができます。

Rect bounds = new Rect();
Paint textPaint = textView.getPaint();
textPaint.getTextBounds(text, 0, text.length(), bounds);
int height = bounds.height();
int width = bounds.width();
于 2010-09-02T19:05:39.743 に答える
87

幅だけが必要な場合は、次を使用できます。

float width = paint.measureText(string);

http://developer.android.com/reference/android/graphics/Paint.html#measureText(java.lang.String)

于 2012-06-17T00:55:57.113 に答える
21

テキストには 2 つの異なる幅測定値があります。1 つは幅に描画されたピクセル数で、もう 1 つはテキストを描画した後にカーソルを進める「ピクセル」数です。

paint.measureTextpaint.getTextWidthsは、指定された文字列を描画した後にカーソルを進める必要があるピクセル数 (float) を返します。ペイントされたピクセル数については、他の回答で述べたように paint.getTextBounds を使用してください。これがフォントの「進化」と呼ばれるものだと思います。

一部のフォントでは、これら 2 つの測定値が (かなり) 異なります。たとえば、フォントBlack Chanceryには、他の文字を超えて (重なって) 文字が伸びています。大文字の「L」を参照してください。他の回答で述べたようにpaint.getTextBoundsを使用して、ピクセルを描画します。

于 2013-08-13T09:14:26.123 に答える
6

私はこの方法で幅を測定しました:

String str ="Hiren Patel";

Paint paint = new Paint();
paint.setTextSize(20);
Typeface typeface = Typeface.createFromAsset(getAssets(), "Helvetica.ttf");
paint.setTypeface(typeface);
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.FILL);
Rect result = new Rect();
paint.getTextBounds(str, 0, str.length(), result);

Log.i("Text dimensions", "Width: "+result.width());

これはあなたを助けるでしょう。

于 2016-12-09T11:07:15.390 に答える
4

static class を使用して、描画されたテキスト ( ) の正確な幅を取得するより良い方法(現在受け入れられている回答よりも汎用性が高い)を共有したいと思います。StringStaticLayout

StaticLayout.getDesiredWidth(text, textPaint))

textView.getTextBounds()このメソッドは、複数行の単一行の幅を計算できるためTextView、または最初から使用しない可能性がTextViewあるため (カスタムView実装など) 、よりも正確です。

この方法は に似てtextPaint.measureText(text)いますが、まれにより正確なようです。

于 2019-06-06T16:32:09.550 に答える
-1

simplay iは行に最大文字を追加し、最大スペースでそれを無視して新しい行を作成します

    v_y = v_y + 30;
    String tx = "مبلغ وقدرة : "+ AmountChar+" لا غير";

    myPaint.setTextAlign(Paint.Align.RIGHT);

    int pxx = 400;
    int pxy = v_y ;
    int word_no = 1;
    int word_lng = 0;
    int max_word_lng = 45;
    int new_line = 0;
    int txt_lng = tx.length();
    int words_lng =0;
    String word_in_line = "" ;
    for (String line : tx.split(" "))
    {
        word_lng = line.length() ;
        words_lng += line.length() + 1;

        if (word_no == 1 )
        {word_in_line = line;
        word_no += 1;
        }
        else
            { word_in_line += " " + line;
            word_no += 1;
            }

        if (word_in_line.length() >= max_word_lng)
       {
           canvas.drawText(word_in_line, pxx, pxy, myPaint);
            new_line += 1;
            pxy = pxy + 30;
            word_no = 1;
            word_in_line = "";
        }
        if (txt_lng <= words_lng )
        { canvas.drawText(word_in_line, pxx, pxy, myPaint); }
    }

    v_y = pxy;
于 2021-04-21T14:03:52.010 に答える