1

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

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

@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,还改变 Zoom 以适应页面宽度(类似于 2.1 中引入的浏览器概览模式)

有谁知道解决方法或知道什么可能导致这种行为?

4

2 回答 2

3

只需在 onRestoreInstanceState 中加载 WebViewState。

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    myWebView.restoreState(savedInstanceState);
}
于 2012-12-11T15:40:35.033 回答
0

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

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

在活动选项卡中。谢谢

于 2011-02-07T13:36:24.987 回答