更改方向后,Android WebView重新呈现UI。

时间:2013-11-15 14:06:26

标签: android webview rendering

在我的应用程序中,我在按钮单击时设置应用程序的方向,使用setRequestedOrientation(),我的应用程序有一个显示本地网页的webview。

我正在使用下面链接中提到的解决方案,以便在方向更改时停止重新加载页面 http://www.devahead.com/blog/2012/01/preserving-the-state-of-an-android-webview-on-screen-orientation-change/

唯一的区别是我的活动中没有onSaveInstanceStateonRestoreInstanceState

在我的情况下发生的情况是,当我更改方向时我的网页视图不会重新加载,但它只是在更改方向时重新呈现UI。

它首先显示UI,然后显示白色空白屏幕几秒钟,然后再次显示UI。

我该如何解决它?

1 个答案:

答案 0 :(得分:0)

曾几何时我使用了他们的实现,但是在阅读了Android文档后,我意识到他们的大部分代码都没有意义,因为注册配置更改(在清单中)意味着您的活动不会被破坏,因为它通常是。

长话短说,你不需要使用FrameLayout作为webView的容器,你可能不需要onConfigurationChanged等。如果我有时间,我会发布一些代码作为一个例子。

目前,请确保您的清单文件中包含以下内容

android:configChanges="keyboard|keyboardHidden|orientation|screenSize"

而不是

android:configChanges="keyboard|keyboardHidden|orientation"

因为在定向更改设备上可能会获得screenSize更改

编辑这就是我所做的(从我的一个项目中略过,所以我可能错过了一些细节)

AndroidManifest.xml中的

<activity android:name=".Activities.WebWrapperActivity"
          android:theme="@android:style/Theme.NoTitleBar"
          android:configChanges="keyboard|keyboardHidden|orientation|screenSize"/>

web_wrapper_activity_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <WebView android:id="@+id/web_wrapper_activity_web_view"
             android:layout_width="fill_parent"
             android:layout_height="fill_parent"
             android:scrollbarStyle="outsideOverlay"/>
</LinearLayout>

活动(或其中的一部分)

public class WebWrapperActivity extends Activity {
    private WebView _webView;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.web_wrapper_activity_layout);

        init();
    }

    private void init() {
        _webView = (WebView) findViewById(R.id.web_wrapper_activity_web_view);
        _webView.setScrollbarFadingEnabled(true);
        _webView.getSettings().setLoadsImagesAutomatically(true);
        _webView.getSettings().setJavaScriptEnabled(true);

        _webView.getSettings().setAllowFileAccess(true);
        _webView.getSettings().setSavePassword(false);
        _webView.getSettings().setPluginState(WebSettings.PluginState.ON);

        _webView.loadUrl(“http://www.google.com”);
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        _webView.saveState(outState);
    }
}

正如我之前提到的,如果您的webView是活动中的唯一视图,则可能不需要onConfigurationChanged

如果您有任何问题,请告诉我