getTextBounds返回错误的值

时间:2014-08-14 13:53:22

标签: android

我正在尝试获取文本字符串的宽度(以像素为单位)我得到的值为8,因为这意味着每个字母都是1像素。 我有以下代码

Rect bounds = new Rect();
Paint paint = new Paint();
paint.setTextSize(12);
paint.getTextBounds("ABCDEFGHI", 0, 1, bounds);
width=bounds.right;      // this value is 8

bounds的值为0,0,8,9

2 个答案:

答案 0 :(得分:5)

该方法采用以下参数:

getTextBounds(char[] text, int index, int count, Rect bounds)

并且您只请求一个字符(第三个参数)的宽度,而不是整个字符串:

paint.getTextBounds("ABCDEFGHI", 0, 1, bounds);

bounds.right是8,这是字母A的宽度。

您案件中的正确电话将是:

String str = "ABCDEFGHI";
paint.getTextBounds(str, 0, str.length(), bounds);

答案 1 :(得分:-1)

您可以尝试使用以下代码获取文字的宽度(以像素为单位)(从Android: measureText() Return Pixels Based on Scaled Pixels找到):

final float densityMultiplier = getContext().getResources().getDisplayMetrics().density;
final float scaledPx = 12 * densityMultiplier;
paint.setTextSize(scaledPx);
final float size = paint.measureText("ABCDEFGHI");

尺寸应该是您的宽度(以像素为单位)。