Android:measureText()基于缩放像素返回像素

时间:2011-06-03 20:50:51

标签: android paint text-size

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

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

然而,它似乎没有起作用。我相信它会返回相对于较小文本大小的宽度。我觉得我错过的东西会让我在脸上拍打自己,然后大喊大叫。

4 个答案:

答案 0 :(得分:38)

你需要像这样得到densityMultiplier:

final float densityMultiplier = getContext().getResources().getDisplayMetrics().density;
final float scaledPx = 20 * densityMultiplier;
paint.setTextSize(scaledPx);
final float size = paint.measureText("sample text");

答案 1 :(得分: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());
}

答案 2 :(得分:0)

我没有足够的声望点来评论答案,但参考了@schwiz和@AndreasEK对接受答案的评论:

measureText()以及getTextBounds()不包含填充,因此解决问题的方法是添加左右填充(或开始和结束填充)< / p>

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;

答案 3 :(得分:-1)

尝试

Paint.SetLinearText(true)

这解决了我的问题。