我在清单中的活动:
<activity android:name=".MainActivity"
android:configChanges="keyboard|orientation|screenSize"
>
...
</activity>
来自MainActivity
班级:
@Override
protected void onCreate(Bundle state) {
super.onCreate(state);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.activity_main);
// Root layout:
layout = (ViewGroup) findViewById(R.id.layout);
// ...
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume()");
Log.i(TAG, "getRequestedOrientation() "+getRequestedOrientation());
Log.i(TAG, "layout size "+layout.getWidth()+" x "+layout.getHeight());
// ...
}
1)暂停和恢复应用时,这是预期的结果 - 宽度为&gt;高度:
I/....MainActivity: onResume()
I/....MainActivity: getRequestedOrientation() 0
I/....MainActivity: layout size 1794 x 1080
2)但是有一个例外:只有当我关闭并再次打开屏幕时(暂停和恢复活动),我仍然按照要求的方向获得预期的横向模式,但是布局的尺寸好像活动处于纵向模式:
I/....MainActivity: onResume()
I/....MainActivity: getRequestedOrientation() 0
I/....MainActivity: layout size 1080 x 1794
3)由于我为自己管理配置更改,因此在关闭屏幕后,我看到Configuration.orientation
切换为纵向;但onConfigurationChanged(...)
只有在onResume()
之后才会调用onResume()
,当我再次打开屏幕时。无论如何,在方向改变为横向之后,尺寸仍然是错误的,但是在一定的延迟之后它们是正确的。
4)根据需要记录布局尺寸时,我再次获得正确的尺寸。
重要的是要注意MainActivity永远不会被销毁和重新创建,这是正确的,因为我已经在清单中声明了配置更改。而且活动实际上仍处于横向模式。可能有一定的时间或其他事件,我必须等待始终获得预期的尺寸。
以下帖子未回答我的问题:android screen orientation mixing up - onWindowFocusChanged(...)
或{{1}}从未被多次调用过,因为活动仍然存在。