Android:measureText()返回基于比例像素的像素

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

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

但是,它似乎没有工作。 我相信它正在返回一个较小的文字大小的宽度。 我觉得我失去了一些东西,会让我拍我自己的脸,并大声嚷嚷。

Solutions Collecting From Web of "Android:measureText()返回基于比例像素的像素"

你需要像这样得到densityMultiplier:

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

我必须做这样的事情。

 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()); } 

我没有足够的声望来评论答案,但是参考了@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; 

尝试

 Paint.SetLinearText(true) 

这解决了我的问题。