getWidth没有更新

时间:2012-06-17 00:39:44

标签: java android

为什么这两个出局都打印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());
}

3 个答案:

答案 0 :(得分:3)

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

如果您只想在更改尺寸(尺寸方面)后查看文字尺寸,可以试试http://developer.android.com/reference/android/graphics/Paint.html#getTextBounds(char[], int, int, android.graphics.Rect)

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

这段代码只是用于调试吗?