Браузеры в Android 2.3+ отлично справляются с сохранением прокрученной позиции содержимого при изменении ориентации.
Я пытаюсь добиться того же самого для WebView, который я показываю в рамках действия, но без успеха.
Я протестировал изменение манифеста (андроид: configChanges = "orientation | keyboardHidden" ), чтобы избежать активного отдыха на ротации, однако из-за разных пропорций положение прокрутки не устанавливается так, как я хочу. Кроме того, это не решение для меня, поскольку мне нужно иметь разные макеты в портретной и альбомной ориентации.
Я попытался сохранить состояние WebView и восстановить его, но это снова возвращает содержимое, отображаемое наверху.
Кроме того, попытка прокрутки в onPageFinished
с помощью scrollTo
не работает, даже если высота WebView в данный момент не равна нулю.
Любые идеи? Заранее спасибо. Питер.
Частичное решение:
Моему коллеге удалось прокрутить работу с помощью javascript-решения. Для простой прокрутки в том же вертикальном положении положение прокрутки WebView "Y" сохраняется в состоянии onSaveInstanceState
. Затем в onPageFinished
добавляется следующее:
public void onPageFinished(final WebView view, final String url) {
if (mScrollY > 0) {
final StringBuilder sb = new StringBuilder("javascript:window.scrollTo(0, ");
sb.append(mScrollY);
sb.append("/ window.devicePixelRatio);");
view.loadUrl(sb.toString());
}
super.onPageFinished(view, url);
}
Вы получаете небольшое мерцание, когда содержимое переходит с начала на новую позицию прокрутки, но это едва заметно. Следующий шаг - попробовать процентный метод (основанный на различиях в высоте), а также исследовать сохранение и восстановление WebView.