【问题标题】:My Webview Reloads When I Change From Portrait To Landscape当我从纵向更改为横向时,我的 Webview 会重新加载
【发布时间】:2011-04-12 00:02:27
【问题描述】:

我有一个简单的WebView,它在 Android 上运行一个 Web 应用程序。问题是当我旋转手机以将其更改为横向时,webview 重新加载并返回到开头。

如何防止这种行为?

罗恩

【问题讨论】:

    标签: webview


    【解决方案1】:

    从 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

    【讨论】:

    • 不知道为什么这没有被赞成!为我彻底解决了这个问题。谢谢!
    • 我必须同意,这是针对 API 级别 13 或以上的解决方案。
    【解决方案2】:

    这可以通过在您的活动中覆盖 onSaveInstanceState(Bundle outState) 并从 Web 视图调用 saveState 来解决:

    这个blog post可能对你有帮助。

    【讨论】:

    • 这似乎是最好的答案。不过,您应该添加所有代码 sn-ps。 :-)
    • 我正在开发我的第一个应用程序。如果我最小化应用程序,也会发生同样的问题。如何预防
    【解决方案3】:

    将以下内容添加到您的 AndroidManifest:

    android:configChanges="orientation|keyboard|keyboardHidden"
    

    所以它应该看起来像这样:

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

    显然,如果您的 WebView 需要键盘支持,则不要包含键盘选项。

    【讨论】:

    • 这并不能解决重新加载问题。
    【解决方案4】:

    在 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"
    

    【讨论】:

    • 我可以通过制作移动或标签兼容的网站并将整个网站放在 webview 上来将 webview 用作 Android 应用程序吗?
    • screenSize 也是需要的,见stackoverflow.com/a/11903662/5189680
    【解决方案5】:
    @Override
    public void onConfigurationChanged(Configuration newConfig){
        super.onConfigurationChanged(newConfig);
    } 
    

    在您的活动中添加上述方法..和

    android:configChanges="keyboard|keyboardHidden|orientation"

    在您的清单文件中

    【讨论】:

    • 问题不是如何启用方向更改,而是如何防止在方向更改时重新加载。
    【解决方案6】:

    上述解决方案的问题是它在webview重新绘制内容之前将屏幕呈现为白色。

    尝试使用 android:configChanges="orientation|keyboardHidden" 在您的 AndroidManifest.xml 文件中用于显示 web 视图的活动。这应该会有所帮助。

    【讨论】:

    • 这也不能解决重新加载问题
    【解决方案7】:

    在活动中添加

    android:configChanges="keyboardHidden|orientation"
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    相关资源
    最近更新 更多