虽然方向是横向的,但在屏幕关闭/打开后,根布局具有纵向尺寸

时间:2017-07-01 02:30:33

标签: android android-layout

我在清单中的活动:

<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}}从未被多次调用过,因为活动仍然存在。

0 个答案:

没有答案