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

Cpt*_*ing 3 android view textview

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

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

mTextView.setText("random text");
Run Code Online (Sandbox Code Playgroud)

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

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

New*_*onx 11

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

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

回答你的问题: 假设onMeasure()可以在任何时候调用它是明智的.一个好的解决方案是改变onMeasure(),使其没有副作用.而是onSizeChanged()在"重置视图"之前等待.

  • 谢谢你的帮助.通过将textview大小更改为固定值而不是fill_parent,它确实可以解决问题.此外,由于您的第二点,我将受影响的代码从onMeasure移动到onSizeChanged,以避免将来出现此问题. (2认同)