addOnLayoutChangeListener vs addOnGlobalLayoutListener vs post(Runnable r)

时间:2015-05-31 04:07:16

标签: android layout view measure

问题: 假设我们有简单的案例:我们有查看,我们必须在此视图中显示一些数据。我们使用静态方法 showData(视图视图)来执行此操作。我想知道测量视图布局的确切时刻,我可以访问 getWidth() getHeight(),并确保这是我视图的最终宽度和高度。

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

我知道3种不同的方法来做到这一点

  • view.addOnLayoutChangeListener - 我们知道布局何时更改,我们 可以得到高度和宽度
  • view.getViewTreeObserver()。addOnGlobalLayoutListener - 就我而言 几乎相同,但我们稍后会得到相关信息。因为layoutChange 从孩子到root的气泡,从root到孩子的globalLayout (对吗?)。
  • view.post(Runnable r) - 正在运行,但我不知道为什么runnable是 在测量视图后发布到ui线程执行。

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

1 个答案:

答案 0 :(得分:2)

  

了解该视图的最佳方法是什么?

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

View.post()
  

为什么?

因为你的妈妈比你了解自己更了解你,所以最好向{{1}}咨询有关其状态的{{1}}。

{{1}}在ui队列上排队进程。 Ui队列= {1,2},稍后您调用该行= {1,2,runnable}。所以肯定会在1,2

之后运行