2014-02-19 1 views
0

У меня есть страница, включая WebView. У меня был android:configChanges="...|orientation|screenSize" в манифесте и работал отлично: я просматриваю вид на определенный текст, а при изменении ориентации экрана WebView позиционируется в тот же текст сверху (это не то же самое, что сохранение ScrollY, потому что измененных ширина).Сохранять сдвиг текста WebView при изменении ориентации

Теперь я изменил дизайн и имел разные макеты для горизонтальной и вертикальной ориентации. Я предпочитаю удалить 'orientation | screenSize' для активности, позволяющей восстановить страницу при изменении ориентации. Все работает отлично, но мне нужно восстановить текст смещения вручную.

Ближайший я смог найти getOffsetForPosition(getScrollX(), getScrollY()) для сохранения смещения и bringPointIntoView(offset) для восстановления смещения, однако эти функции не являются обратной совместимостью: (!) getOffsetForPosition хочет API 3+, в то время как bringPointIntoView требует API 14+. Кроме того, они применяются к TextView и могут быть неточными с помощью WebView из-за HTML-тегов.

Пробные WebView.saveState и WebView.restoreState (после загрузки страницы). Кажется, не работает для меня.

Да, я могу получить расчетное положение прокрутки с помощью Paint и FontMetrics, но это «грязный трюк». В идеале я предпочитаю получать все параметры из системы и поддерживать код как можно более обратной совместимости.

ответ

0

К сожалению, Javascript не работает, поскольку при перезагрузке страницы HTML вся сохраненная информация будет потеряна.

С почти 1,5 месяца прошло с момента последнего ответа, вот путь, который не является 100% доказательством, но вполне приемлемо: сохранить относительную прокруткой позиции фракции на общую высоту:

private float relPosition; 

@Override 
public void onCreate(Bundle savedState) { 

    ........ 
    relPosition = savedInstanceState.getFloat("WebViewPos"); 
     ....... 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
     outState.putFloat("WebViewPos", (float) webView.getScrollY()/webView.getContextHeight(); 
} 


/* After the page has been loaded */ 
    webView.setScrollY((int)(relPosition * webView.getContextHeight())); 

На самом деле у меня нет возможности попробовать (просто изменил дизайн) :)

0

WebView не имеет хорошие интерфейсы Java для этого: Я думаю, что вам лучше всего было бы сделать это в JavaScript:

  • в window.onscroll найти текущий пункт (используйте document.elementFromPoint [1] для это)
  • в window.onresize свитка в верхней части этого пункта [3]

Это будет иметь ценность одного абзаца детализации. Я не уверен, что это сработает для вас. Если это не так, вам удастся использовать Range [2] вместо поиска абзаца, но я никогда не пробовал делать это сам.

[1] на основе Get element at specified position - JavaScript
[2], как здесь: Range from pixels
[3] Вы можете использовать отдельную функцию JavaScript, которую вы называете из onConfigurationChanged так window.onresize также может быть вызван, если клавиатуры хлопков up - это зависит от конфигурации вашего представления и конфигурации активности.

 Смежные вопросы

  • Нет связанных вопросов^_^