在Android中更改屏幕方向而不重新加载活动

32
我希望在运行我的Android应用程序时,通过以下代码来编程更改方向: ```java setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); ``` 请注意:您需要将此代码放置在适当的位置以确保它能起作用。
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);

目前这个方案可以使用,但主要问题是当屏幕方向改变时整个活动都会重新加载,我不希望出现这种情况。有没有可能避免这种情况?谢谢。

编辑:好的,在一段时间后,我找到了我缺失的内容。我还需要将“screenSize”包含在“configChanges”属性中,所以配置如下:

android:configChanges="orientation|screenSize"

解决了整个问题。


我认为你应该查看这个答案中的第三个选项。我相信这就是PhoneGap处理方向变化的方式https://dev59.com/oG025IYBdhLWcg3wl3K- - MikeIsrael
你可以旋转你的Activity/Fragment视图。请参考:https://dev59.com/d3_aa4cB1Zd3GeqP2WB8#23494104 - ARN
5个回答

29

这解决了我所有的问题,包括导航栈。谢谢啊! - Daan Luttik

4

你需要重写 onSaveInstanceState(Bundle savedInstanceState) 方法,并将你想要更改的应用程序状态值写入 Bundle 参数中。


+1,这是正确的答案 => 他所问的不可能,只有使用API 13以上的android:configChanges =“orientation | screenSize”才能实现他想要的功能。 - user529543

1
在 AndroidManifest 文件中为您想要处理此方向的活动添加 android:configChanges="orientation"
在活动中使用 onConfigurationChange 覆盖方法。执行您想要处理方向更改的任务。

谢谢,但它仍然不起作用。可能是因为我在活动中使用了Phonegap/HTML5吗?谢谢。 - luisfer
@RajShah 为什么需要更多的代码?你看了问题的描述吗?标题呢? - user529543

1

谢谢,但它仍然不起作用。可能是因为我在活动中使用了Phonegap/HTML5吗?谢谢。 - luisfer

1
调用此方法并设置清单文件。
android:configChanges="orientation|screenSize|keyboardHidden"

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

        // Checks the orientation of the screen
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
            Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接