我有一个活动,在线性布局中有几个视图,一个是文本视图,一个是我的游戏的主视图,这是我在代码中做的事情的自定义视图。
当我将以下代码添加到我的活动中时:
mTextView.setText("random text");
onMeasure()在自定义视图中被调用,即textview上的setText似乎导致不同的视图重新测量。 因为我的onmeasure()代码以不合需要的方式重置了视图,所以我想避免这种情况发生。
在这种情况下导致调用onMeasure()的原因是什么?如何阻止它?
答案 0 :(得分:11)
回答您的问题: 在线性布局中,每个元素的大小和位置取决于前面元素的大小和位置。如果使用布局权重来调整元素的大小而不是使用固定大小,那么元素的大小和位置也取决于它之后的元素。
更改一个元素的内容(在您的情况下通过调用setText()
)可能会更改该元素的大小。因此,Android会重新布局以确定LinearLayout子项的新大小和位置,这需要测量线性布局中的所有元素。
回答您的问题:
假设可以随时调用onMeasure()
是明智的。一个好的解决方案是改变onMeasure()
,使其没有副作用。而是在“重置视图”之前等待onSizeChanged()
。