为什么这两个出局都打印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());
}
答案 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运行下一行,那么结果将是相同的。您可以将它们分成单独的方法。或者添加等待。
这段代码只是用于调试吗?