我正在开发一个 android 应用程序,现在我限制用户只对所有活动使用水平视图。
我希望能够为用户提供旋转屏幕的选项,但是当我这样做时,活动从头开始,而不是保持不变。
知道旋转屏幕时如何保存状态吗?
首先,您必须在您的活动中覆盖。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。我们一直在做一个简单的旋转。无需从头开始“重建”基础设施(例如获取视图,..)
每次旋转设备时,都会再次调用 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);
}
<activity (...)
android:configChanges="orientation|keyboard"
(...)>
将此添加到您的清单中不允许 Android 在更改布局后重新启动活动。