addOnLayoutChangeListener vs addOnGlobalLayoutListener vs post(Runnable r)

com*_*986 10 layout android view measure

问题:假设我们有简单的情况:我们有视图,我们必须在这个视图上显示一些数据.我们使用静态方法showData(View view)来做到这一点.我想知道测量视图布局的确切时刻,我可以访问getWidth() getHeight()并确保这是我视图的最终宽度和高度.

我知道什么 :(不确定我100%是对的):

我知道有3种不同的做法

  • view.addOnLayoutChangeListener - 我们知道布局何时更改,我们可以获得高度和宽度
  • view.getViewTreeObserver().addOnGlobalLayoutListener - 对于我的情况几乎相同,但我们稍后会得到相关信息.因为layoutChange从children到root冒泡,而globalLayout从root到child(对吧?).
  • view.post(Runnable r) - 正在工作,但我不知道为什么runnable会在测量视图后发布到ui线程执行.

问题:了解视图的最佳方法是什么?为什么?

Ell*_*ltz 1

了解视图是否得到测量的最佳方法是什么?

最好的方法?OnGlobalLayoutListenerView.getMeasuredHeight()View.getMeasuredWidth()

为什么?

因为你妈妈比你更了解你自己,所以最好咨询一下ViewGroup她的状态,这自然就说明了孩子们的情况。

View.post()将进程放入 ui 队列中。Ui 队列 ={1,2},稍后调用该行 = {1,2,runnable} 后。所以它肯定会在 1,2 之后运行