首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android: measureText()根据缩放的像素返回像素

Android: measureText()根据缩放的像素返回像素
EN

Stack Overflow用户
提问于 2011-06-04 04:50:51
回答 4查看 20.5K关注 0票数 18

因此,我使用Paint的measureText()方法来测量一段文本的宽度,但我想基于特定的文本大小来测量文本。假设我想要得到一个文本段的宽度,当它占用一定的TextView时,它将是20个缩放像素。我尝试了以下几种方法:

代码语言:javascript
复制
Paint paint = new Paint();
paint.setTextSize(20);
paint.measureText("sample text");

然而,它似乎不起作用。我相信它返回的是相对于较小文本大小的宽度。我觉得我错过了一些东西,会让我扇自己一巴掌,大叫疱疹皮肤病。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-04 06:10:24

您需要像这样获取densityMultiplier:

代码语言:javascript
复制
final float densityMultiplier = getContext().getResources().getDisplayMetrics().density;
final float scaledPx = 20 * densityMultiplier;
paint.setTextSize(scaledPx);
final float size = paint.measureText("sample text");
票数 38
EN

Stack Overflow用户

发布于 2011-06-04 05:15:13

我会在必要的时候做这样的事情。

代码语言:javascript
复制
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());
}
票数 1
EN

Stack Overflow用户

发布于 2017-11-30 14:12:52

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

measureText()getTextBounds()不包括填充,所以他们的问题的解决方案可能是添加左侧和右侧填充(或开始和结束填充)

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6232541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档