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

时间:2013-02-14 11:26:33

标签: android screen-orientation

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

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

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

编辑:好的,在我发现我失踪之后。我必须在configChanges属性中包含“screenSize”,所以

android:configChanges="orientation|screenSize"

解决了整个事情。

5 个答案:

答案 0 :(得分:27)

请参阅@luisfer的编辑。对于Android 3.2及更高版本的定位,您需要两个

android:configChanges="orientation|screenSize"

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

答案 1 :(得分:4)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

这里有回答:

Android, how to not destroy the activity when I rotate the device?

添加:

android:configChanges="orientation"

到你的androidmanifest。

请参阅:

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

答案 4 :(得分: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();
        }
    }