onmeasure被调用,我不知道为什么 - android

时间:2012-03-10 22:28:08

标签: android view textview

我有一个活动,在线性布局中有几个视图,一个是文本视图,一个是我的游戏的主视图,这是我在代码中做的事情的自定义视图。

当我将以下代码添加到我的活动中时:

mTextView.setText("random text");

onMeasure()在自定义视图中被调用,即textview上的setText似乎导致不同的视图重新测量。 因为我的onmeasure()代码以不合需要的方式重置了视图,所以我想避免这种情况发生。

在这种情况下导致调用onMeasure()的原因是什么?如何阻止它?

1 个答案:

答案 0 :(得分:11)

回答您的问题: 在线性布局中,每个元素的大小和位置取决于前面元素的大小和位置。如果使用布局权重来调整元素的大小而不是使用固定大小,那么元素的大小和位置也取决于它之后的元素。

更改一个元素的内容(在您的情况下通过调用setText())可能会更改该元素的大小。因此,Android会重新布局以确定LinearLayout子项的新大小和位置,这需要测量线性布局中的所有元素。

回答您的问题: 假设可以随时调用onMeasure()是明智的。一个好的解决方案是改变onMeasure(),使其没有副作用。而是在“重置视图”之前等待onSizeChanged()