屏幕旋转时保存WebView状态

时间:2016-08-22 18:10:41

标签: android webview

我正在制作自己的浏览器而且需要帮助。我试图挽救它的状态。我已经尝试了以下方法,但不是我正在寻找的解决方案。

我试过这个:

<activity android:name=".About"
    android:configChanges="orientation|keyboard|screenSize" />

但问题是工具栏没有调整大小,所以标题是小的,工具栏高度最小(如果我从横向开始并旋转到肖像)并且标题是大而且高大(如果我开始在纵向和旋转到风景)。

我尝试过的其他事情是

@Override
public void onCreate(final Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.blah);
   if (savedInstanceState != null)
      ((WebView)findViewById(R.id.webview)).restoreState(savedInstanceState.getBundle("webViewState");
}

@Override
protected void onSaveInstanceState(Bundle outState) {
      super.onSaveInstanceState(outState);
      Bundle bundle = new Bundle();
      webView.saveState(bundle);
      outState.putBundle("webViewState", bundle);
}

但WebView未正确保存。

如何在旋转时保存webview状态并且没有工具栏大小问题?

如果我处理配置更改并尝试调整工具栏和文本的大小,可能会更好吗?

谢谢!

4 个答案:

答案 0 :(得分:1)

您应该将Webview状态保存到自己的Bundle中。另外,不要忘记致电super.onSaveInstanceState(outState)

@Override
public void onCreate(final Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.blah);
   if (savedInstanceState != null)
      ((WebView)findViewById(R.id.webview)).restoreState(savedInstanceState.getBundle("webViewState"));
}

@Override
protected void onSaveInstanceState(Bundle outState) {
      super.onSaveInstanceState(outState);
      Bundle bundle = new Bundle();
      webView.saveState(bundle);
      outState.putBundle("webViewState", bundle);
}

答案 1 :(得分:0)

我正在使用

<activity android:name="XYZ.activity.your.browser.activity" android:configChanges="orientation|screenSize|keyboardHidden|keyboard" android:windowSoftInputMode="adjustPan"/>

在我的AndroidManifest.xml文件中,它运行得很好。没有调整大小的问题。

我不会在常规活动中推荐这个,但是如果你只有一个WebView,一个工具栏和几个按钮,那么这应该没问题。

答案 2 :(得分:0)

改进@EpicPandaForce答案,它确实有效!

WebView webView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (savedInstanceState != null)
        ((WebView) findViewById(R.id.webView)).restoreState(savedInstanceState.getBundle("webViewState"));
    else {
        webView = (WebView) findViewById(R.id.webView);
        webView.loadUrl("https://www.YAHOO.com/");
    }

}

protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    Bundle bundle = new Bundle();
    webView.saveState(bundle);
    outState.putBundle("webViewState", bundle);
}

答案 3 :(得分:0)

第一步

<activity android:name=".MainActivity"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize">

第二步

 if (savedInstanceState != null)
    {  ((WebView) findViewById(R.id.webView)).restoreState(savedInstanceState.getBundle("webViewState"));}
    else {
       wv1=(WebView)findViewById(R.id.webView);
        load(); // create seprate functin to loadweb
    }

第三步

  public void load() {
    wv1=(WebView)findViewById(R.id.webView);
    wv1.setWebViewClient(new MyBrowser());
    wv1.getSettings().setLoadsImagesAutomatically(true);
    wv1.getSettings().setJavaScriptEnabled(true);
    wv1.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
    wv1.loadUrl("http://citynsr.ueuo.com/");
}
private class MyBrowser extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}

第四步

 protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    Bundle bundle = new Bundle();
    wv1.saveState(bundle);
    outState.putBundle("webViewState", bundle);
}
@Override
protected void onRestoreInstanceState(Bundle state) {
    super.onRestoreInstanceState(state);
    Bundle bundle = new Bundle();
    wv1.saveState(bundle);
    state.putBundle("webViewState", bundle);
}