できれば身長も欲しいです。
7 に答える
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();
幅だけが必要な場合は、次を使用できます。
float width = paint.measureText(string);
http://developer.android.com/reference/android/graphics/Paint.html#measureText(java.lang.String)
テキストには 2 つの異なる幅測定値があります。1 つは幅に描画されたピクセル数で、もう 1 つはテキストを描画した後にカーソルを進める「ピクセル」数です。
paint.measureTextとpaint.getTextWidthsは、指定された文字列を描画した後にカーソルを進める必要があるピクセル数 (float) を返します。ペイントされたピクセル数については、他の回答で述べたように paint.getTextBounds を使用してください。これがフォントの「進化」と呼ばれるものだと思います。
一部のフォントでは、これら 2 つの測定値が (かなり) 異なります。たとえば、フォントBlack Chanceryには、他の文字を超えて (重なって) 文字が伸びています。大文字の「L」を参照してください。他の回答で述べたようにpaint.getTextBoundsを使用して、ピクセルを描画します。
私はこの方法で幅を測定しました:
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());
これはあなたを助けるでしょう。
static class を使用して、描画されたテキスト ( ) の正確な幅を取得するより良い方法(現在受け入れられている回答よりも汎用性が高い)を共有したいと思います。String
StaticLayout
StaticLayout.getDesiredWidth(text, textPaint))
textView.getTextBounds()
このメソッドは、複数行の単一行の幅を計算できるためTextView
、または最初から使用しない可能性がTextView
あるため (カスタムView
実装など) 、よりも正確です。
この方法は に似てtextPaint.measureText(text)
いますが、まれにより正確なようです。
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;