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