用于横向加载纵向布局的setRequestedOrientation

时间:2016-05-05 07:08:46

标签: android screen-orientation

我正在开发一款需要在智能手机中严格以纵向模式运行且在平板电脑中严格以横向模式运行的应用。我正在使用以下代码在我的登录活动的onCreate方法中手动设置方向:

 if (getResources().getBoolean(R.bool.portrait_only)) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        } else {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
        }

平板电脑中的bool值为false。然而,方向改变为景观;仍然从“layout_large”文件夹而不是“layout_large_land”文件夹中选取布局文件。因此我的观点看起来很紧张

我试过这个link

但它没有帮助。!

感谢任何帮助。

先谢谢。

3 个答案:

答案 0 :(得分:1)

我使用了像这样的文件夹用于Tab&移动

enter image description here

layout文件夹用于移动设备,layout-sw720dp用于标签。 720 dp是宽度,告诉720+ dp将使用该文件夹进行布局。

答案 1 :(得分:0)

我遇到了同样的问题。请确保您没有为AndroidManifest中的活动设置android:configChanges="orientation"

我猜测问题是setRequestedOrientation可能会触发方向配置更改,但是如果使用android:configChanges="orientation"此配置更改未被系统注册。

或者,如果您想保留Manifest设置,则必须为此特定配置更改实现自己的娱乐机制。

看起来像这样:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if(getResources().getBoolean(R.bool.portrait_only))
        recreate();
}

答案 2 :(得分:0)

在此线程中迟到,但将来会有所帮助。在我的情况下,我通过调用以编程方式更改屏幕的方向

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

取决于用户的操作。我还为纵向和横向创建了单独的布局,但每次将屏幕从纵向更改为横向时,它总是以横向加载纵向屏幕。

AndroidManifest.xml中,我已经设置了

 android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"

所以,要解决这个问题,需要从 android:configChanges 中删除方向,然后它才能工作。这就是 android 文档 Link 提到的

<块引用>

“orientation”值防止在屏幕方向时重新启动 变化。