3

为什么两个出局都打印84?第一个应该是 84,第二个应该是 220。如果我第二次点击,两个输出都是 220。

public void btnClick(View v) {
    System.out.println(textView1.getWidth());
    textView1.setTextSize(TypedValue.COMPLEX_UNIT_PX, 55);
    System.out.println(textView1.getWidth());
}
4

3 回答 3

3

如果已经测量过,更改文本大小不会改变视图的大小。SetTextSize() 将触发一个 invalidate(),但这只会在未来触发一个 onDraw()。视图将不再被测量,其宽度和高度将保持不变。您可以在视图上调用 requestLayout() 以重新计算宽度和高度。

如果您只想在更改大小后查看文本的大小(就其尺寸而言),您可以尝试http://developer.android.com/reference/android/graphics/Paint.html#getTextBounds(char[] , 整数, 整数, android.graphics.Rect)

于 2012-06-17T01:02:06.973 回答
1

调用后TextView大小不会立即更新。setTextSize()它只是使视图无效,稍后将更新。计算 View 的大小很昂贵,因为它取决于整个布局,因此不会立即完成。

稍后尝试获取宽度,您将获得正确的值。

于 2012-06-17T00:58:07.160 回答
0

我认为第二个 getWidth() 在 setTextSize 完成之前正在运行。因此得到相同的结果。Java 在运行下一行之前不会等待每一行代码完成。

如果 setTextSize 行需要 5 毫秒才能完成,并且下一行在 setTextLine 运行后 2 毫秒运行,那么结果将是相同的。您可以将它们分成不同的方法。或添加等待。

此代码仅用于调试吗?

于 2012-06-17T00:54:10.000 回答