18

所以我使用Paint的measureText()方法来测量一段文本的宽度,但是我想根据一定的文本大小来测量文本。假设我想获得一个文本段的宽度,当它占据某个 TextView 时,它将是 20 个缩放像素。我尝试了以下方法:

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

但是,它似乎不起作用。我相信它会返回相对于较小文本大小的宽度。我觉得我错过了一些会让我扇耳光并大喊大叫的东西。

4

4 回答 4

38

您需要像这样获得密度乘数:

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 回答