在Android 2.1中更改方向期间保存WebView滚动位置时出现问题

时间:2010-02-10 23:00:18

标签: android webview scroll-position

我在修改方向更改期间保留Android的WebView控件中加载的内容的当前滚动位置时遇到问题。该问题目前仅存在于Android 2.1和Android 2.1 Update 1

我使用的代码基于默认的Browser应用程序,如下所示:

@Override
protected void onCreate(Bundle savedInstanceState)
{
  super.onCreate(savedInstanceState);
  mWebView = new WebView(this);
  setContentView(mWebView);
  mWebView.setWebViewClient(mWebViewClient);

  if (savedInstanceState != null)
  {
    final WebBackForwardList list = mWebView.restoreState(savedInstanceState);
    if (list == null)
      return;

    if (savedInstanceState.containsKey("currentPicture"))
    {
       final File f = new File(savedInstanceState.getString("currentPicture"));
       mWebView.restorePicture(savedInstanceState, f);
       f.delete();
    }
  }else
    mWebView.loadUrl("http://slashdot.org/");
 }

 @Override
 protected void onSaveInstanceState(Bundle outState)
 {
   final WebBackForwardList list = mWebView.saveState(outState);
   File mThumbnailDir = getDir("thumbnails", 0);
   if (list != null)
   {
     final File f = new File(mThumbnailDir, mWebView.hashCode() + "_pic.save");
     if (mWebView.savePicture(outState, f))
        outState.putString("currentPicture", f.getPath());
   }
 }

此代码适用于Android 1.5,1.6和2.0.1。在Android 2.1中,相同的代码会在一瞬间恢复位置,然后页面重新加载并滚动到位置0,0。

在Android 2.1 Update 1中,它不仅会向后滚动到0,0,还会更改缩放以适应页面宽度(类似于2.1中引入的浏览器概述模式)

是否有人知道某种解决方法或知道可能导致此类行为的原因?

2 个答案:

答案 0 :(得分:3)

只需在onRestoreInstanceState中加载WebViewState。

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    myWebView.restoreState(savedInstanceState);
}

答案 1 :(得分:0)

将方向从横向更改为纵向或反之亦然,它会启动新活动。因此,您可以打开更新活动。 将代码放入AndroidManifest.xml并重新加载应用程序。

 "activity android:name=".Main
 android:configChanges="orientation"

在活动标签中。感谢