3

我正在开发一个 android 应用程序,现在我限制用户只对所有活动使用水平视图。

我希望能够为用户提供旋转屏幕的选项,但是当我这样做时,活动从头开始,而不是保持不变。

知道旋转屏幕时如何保存状态吗?

4

3 回答 3

6

首先,您必须在您的活动中覆盖。onConfigurationChanged(Configuration)

 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();
    }
  }

您还必须在清单文件中编辑适当的元素以包含 android:configChanges 只需查看以下代码:

<activity android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden"
          android:label="@string/app_name">

我也喜欢 Marko 的想法,但它根本没有效率。这样,我们就不必调用 onCreate/onStartup/etc。我们一直在做一个简单的旋转。无需从头开始“重建”基础设施(例如获取视图,..)

于 2013-03-22T13:11:56.820 回答
3

每次旋转设备时,都会再次调用 onCreate 方法。您可以通过覆盖 onSavedInstanceState 来保存这些值,然后在 onRestoreInstanceState 或 onCreate 方法中将它们取回。例如让我们保存布尔值(你可以保存任何你想要的):

保存值:

public void onSaveInstanceState(Bundle outState) {
        outState.putBoolean("booleanValue", true);
}

恢复值(您也可以在 onCreate 中调用它):

protected void onRestoreInstanceState(Bundle savedInstanceState) {
        if (savedInstanceState != null && savedInstanceState.containsKey("booleanValue")) {
            boolean myBoolean = savedInstanceState.getBoolean("booleanValue");
        }
        super.onRestoreInstanceState(savedInstanceState);
    }
于 2013-03-22T13:12:19.930 回答
0
<activity (...)
          android:configChanges="orientation|keyboard"
          (...)>

将此添加到您的清单中不允许 Android 在更改布局后重新启动活动。

于 2013-03-22T13:15:26.863 回答