何时在Android中通知ViewTreeObserver.OnGlobalLayoutListener

时间:2015-04-07 22:02:51

标签: android user-interface screen-rotation

我正在尝试检测我拥有的视图的屏幕旋转。我意识到当屏幕旋转时,会通知View.OnLayoutChangeListener和ViewTreeObserver.OnGlobalLayoutListener。

要确定我将使用哪一个来检测屏幕旋转,我需要了解通知其中任何一个的情况。

对于View.OnLayoutChangeListener,从文档中可以清楚地看到,当视图的绑定发生变化时会通知它。

但是,我不清楚ViewTreeObserver.OnGlobalLayoutListener的文档。所以我的问题是,究竟是什么时候通知ViewTreeObserver.OnGlobalLayoutListener?

回答了这个问题后,我应该使用ViewTreeObserver.OnGlobalLayoutListener或View.OnLayoutChangeListener来检测屏幕旋转吗?

1 个答案:

答案 0 :(得分:1)

沉浸式评论是正确的答案。您应该覆盖onConfigurationChanged()以对方向更改做出反应。

此外,为防止您的Activity在设备轮换时重新启动,您应在清单中指定android:configChanges="orientation|keyboardHidden|screenSize"之类的内容。

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
        // landscape
    } else {
        // portrait
    }
}

请参阅:prevent activity restarting when orientation changes

要回答您的具体问题,您可以查看the source code