向きの変更中に、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 で導入されたブラウザーの概要モードと同様)。
誰かが回避策を知っていますか、またはそのような動作の原因が何か考えていますか?