32

我想在运行我的 Android 应用程序时以编程方式更改方向,使用以下代码行:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);

它们到目前为止工作,但主要问题是当屏幕方向改变时重新加载整个活动,我不希望那样。可能吗?谢谢。

编辑:好的,在我发现我错过了什么之后。我还必须在 configChanges 属性中包含“screenSize”,所以有

android:configChanges="orientation|screenSize"

解决了整个事情。

4

5 回答 5

29

请参阅@luisfer 的编辑。对于面向 Android 3.2 及更高版本,您需要 BOTH

android:configChanges="orientation|screenSize"

http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange

于 2013-07-22T23:30:40.533 回答
4

您需要覆盖 onSaveInstanceState(Bundle savedInstanceState) 并将要更改的应用程序状态值写入 Bundle 参数

于 2013-02-14T11:28:24.233 回答
1

在 AndroidManifest 文件中添加android:configChanges="orientation"要处理此方向的活动

在活动中使用 onConfigurationChange 覆盖的方法。做你想在方向改变中处理的任务。

于 2013-02-14T11:34:25.753 回答
1

在这里回答:

Android,当我旋转设备时如何不破坏活动?

添加:

android:configChanges="orientation"

到你的 androidmanifest。

看:

http://developer.android.com/guide/topics/manifest/activity-element.html#config

于 2013-02-14T11:37:40.400 回答
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();
        }
    }
于 2015-09-01T08:53:00.450 回答