保存旋转屏幕时的活动状态
我正在研究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">
我也很喜欢马尔科的想法,但它只是效率不高。这样,我们不必调用Create/onStartup /等。我们一直在做简单的旋转。没有必要从头开始“重建”基础设施(例如获取视图,..)
每次旋转设备时,都会再次调用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);
}
但我想保存活动的视图不值。我有一个带有文本视图的表格,如果用户点击文本视图中的文本更改,当您翻转屏幕时,文本视图的文本会更改为原始视图。 – Mike 2013-03-22 13:25:44
所以你得到textview的文本像字符串textViewtext = textview.getText();那么不是保存布尔值,而是保存该字符串..? – 2013-03-22 13:28:42
或者您正在动态添加文字浏览? – 2013-03-22 13:29:20
<activity (...)
android:configChanges="orientation|keyboard"
(...)>
将此添加到清单中不允许Android在更改布局后重新启动活动。
请注意,文档建议不要这样做,但它也是这样做的;) – codeMagic 2013-03-22 13:17:19
@codeMagic请问您可以发布一个链接吗? – poitroae 2013-03-22 13:35:05
它在官方安卓网站上,因为configChanges =“oriantatin | keyboardHidden”没有照顾所有可能的变化,你有更多的Android默认照顾,并通过覆盖它预计你照顾他们 – 2013-03-22 13:36:28