18

そこで、PaintのmeasureText()メソッドを使用してテキストのセグメントの幅を測定しましたが、特定のテキストサイズに基づいてテキストを測定したかったのです。特定のTextViewを占めるときに20スケールのピクセルになるテキストセグメントの幅を取得したいとします。私は次のことを試しました:

Paint paint = new Paint();
paint.setTextSize(20);
paint.measureText("sample text");

ただし、機能していないようです。小さいテキストサイズに対して幅を返していると思います。顔を平手打ちして、ハーブダープを怒鳴らせる何かが欠けているような気がします。

4

4 に答える 4

38

次のようにdensityMultiplierを取得する必要があります。

final float densityMultiplier = getContext().getResources().getDisplayMetrics().density;
final float scaledPx = 20 * densityMultiplier;
paint.setTextSize(scaledPx);
final float size = paint.measureText("sample text");
于 2011-06-03T22:10:24.000 に答える
1

私はしなければならないときにこのようなことをします。

int textSize = 20;
for(int i = 2; i<18 && curTextSize< textSize;i+=2)
{
    this.label.setTextSize(i);
    curTextSize = this.label.getPaint().measureText(this.label.getText().toString());
}
于 2011-06-03T21:15:12.943 に答える
0

回答にコメントするのに十分な評判ポイントがありませんが、受け入れられた回答に対する@schwizと@AndreasEKのコメントを参照してください。

measureText()、とともにgetTextBounds()、パディングが含まれていないため、問題の解決策は、左右のパディング(または開始と終了のパディング)を追加することである可能性があります

final float scaleFactor = getContext().getResources().getDisplayMetrics().density;
final float scaledPx = 20 * scaleFactor;
paint.setTextSize(scaledPx);
final float padding = scaleFactor * (textView.getPaddingStart() + textView.getPaddingEnd());
final float size = paint.measureText("sample text") + padding;
于 2017-11-30T06:12:52.117 に答える
-1

試す

Paint.SetLinearText(true)

それは私にとって問題を解決しました。

于 2014-12-11T12:45:50.067 に答える