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 に戻るだけでなく、ズームをページ幅に合わせて変更します (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 に答える