我正在尝试检测我拥有的视图的屏幕旋转。我意识到当屏幕旋转时,会通知View.OnLayoutChangeListener和ViewTreeObserver.OnGlobalLayoutListener。
要确定我将使用哪一个来检测屏幕旋转,我需要了解通知其中任何一个的情况。
对于View.OnLayoutChangeListener,从文档中可以清楚地看到,当视图的绑定发生变化时会通知它。
但是,我不清楚ViewTreeObserver.OnGlobalLayoutListener的文档。所以我的问题是,究竟是什么时候通知ViewTreeObserver.OnGlobalLayoutListener?
回答了这个问题后,我应该使用ViewTreeObserver.OnGlobalLayoutListener或View.OnLayoutChangeListener来检测屏幕旋转吗?
答案 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。