【发布时间】:2011-04-12 00:02:27
【问题描述】:
我有一个简单的WebView,它在 Android 上运行一个 Web 应用程序。问题是当我旋转手机以将其更改为横向时,webview 重新加载并返回到开头。
如何防止这种行为?
罗恩
【问题讨论】:
标签: webview
我有一个简单的WebView,它在 Android 上运行一个 Web 应用程序。问题是当我旋转手机以将其更改为横向时,webview 重新加载并返回到开头。
如何防止这种行为?
罗恩
【问题讨论】:
标签: webview
从 Android 3.2(API 级别 13)开始,当设备在纵向和横向之间切换时,“屏幕尺寸”也会发生变化。因此,如果您想在为 API 级别 13 或更高级别(由 minSdkVersion 和 targetSdkVersion 属性声明)进行开发时防止由于方向更改而导致运行时重新启动,则除了“orientation”值之外,还必须包含“screenSize”值。也就是说,你必须声明
<activity android:configChanges="orientation|screenSize">
这是文档:http://developer.android.com/guide/topics/resources/runtime-changes.html
【讨论】:
这可以通过在您的活动中覆盖 onSaveInstanceState(Bundle outState) 并从 Web 视图调用 saveState 来解决:
这个blog post可能对你有帮助。
【讨论】:
将以下内容添加到您的 AndroidManifest:
android:configChanges="orientation|keyboard|keyboardHidden"
所以它应该看起来像这样:
<activity android:name=".MyActivity"
android:label="@string/app_name"
android:configChanges="orientation|keyboard|keyboardHidden">
显然,如果您的 WebView 需要键盘支持,则不要包含键盘选项。
【讨论】:
在 oncreate 之前添加这个
@Override
protected void onSaveInstanceState(Bundle outState) {
webview.saveState(outState);
}
以这种方式编写 oncreate。放在最后
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layoutname);
if (savedInstanceState != null)
{
((WebView)findViewById(R.id.webview)).restoreState(savedInstanceState);
}
else
{
webview.loadUrl("http://www.playbuzz.org/");
}
}
在Androidmanifest中插入activity下
android:configChanges="keyboardHidden|orientation"
【讨论】:
@Override
public void onConfigurationChanged(Configuration newConfig){
super.onConfigurationChanged(newConfig);
}
在您的活动中添加上述方法..和
android:configChanges="keyboard|keyboardHidden|orientation"
在您的清单文件中
【讨论】:
上述解决方案的问题是它在webview重新绘制内容之前将屏幕呈现为白色。
尝试使用 android:configChanges="orientation|keyboardHidden" 在您的 AndroidManifest.xml 文件中用于显示 web 视图的活动。这应该会有所帮助。
【讨论】:
在活动中添加
android:configChanges="keyboardHidden|orientation"
【讨论】: