Проблема сохранения позиции прокрутки WebView во время изменения ориентации в Android 2.1
У меня проблема с сохранением текущей позиции прокрутки содержимого, загруженного в элемент управления Android WebView во время изменения ориентации. В настоящее время проблема существует только в Android 2.1 и Android 2.1, обновление 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, обновление 1, он не только прокручивает обратно до 0,0, но также изменяет масштаб, чтобы соответствовать ширине страницы (аналогично режиму обзора браузера, представленному в 2.1)
Кто-нибудь знает об обходном пути или имеет какое-либо представление о том, что может вызвать такое поведение?
2 ответа
Просто загрузите WebViewState в onRestoreInstanceState.
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
myWebView.restoreState(savedInstanceState);
}
Меняя ориентацию с альбомной на портретную или наоборот, запускается новое действие. Следовательно вы открыты как обновленная деятельность. Поместите код в ваш AndroidManifest.xml и перезагрузите приложение.
"activity android:name=".Main
android:configChanges="orientation"
в вкладке деятельности. Спасибо