ОБНОВЛЕННЫЙ ВОПРОС: (16 ноября 2016 г.) что в HTML заставит WebView перестать возвращать допустимые значения для "canScrollXXX"/computeXXXXRange/computeXXXXScrollOffset/computeXXXXScrollExtent и остановить отображение встроенных элементов управления масштабированием.
Мое требование
У меня есть WebView внутри ViewPager. Я хотел бы, чтобы WebView прокручивался влево и вправо, пока не встретился с краем HTML, а затем ViewPager мог вступить во владение.
Моя проблема
На SO уже есть несколько вопросов по этой проблеме. Все они используют
"computeHorizontalScrollOffset"
но это ВСЕГДА возвращает 0 для меня.
Кроме того, следующее также всегда возвращает 0.
final int range = computeHorizontalScrollRange() - computeHorizontalScrollExtent();
Кто-нибудь знает, почему "computeHorizontalScrollOffset" всегда возвращает 0?
Я также заметил, что встроенные элементы управления масштабированием не отображаются, хотя я тоже сказал им об этом.
Существующие исследования
Вопросы SO, на которые я уже смотрел, следующие (среди прочего):
- Горизонтальная прокрутка веб-просмотра внутри ViewPager (Прокрутка веб-просмотра по горизонтали внутри ViewPager)
- Как горизонтально прокручивать веб-просмотр внутри ViewPager (Как прокручивать веб-просмотр горизонтально внутри ViewPager? а>)
Мой код
Вот мой макет WebView. Я пробовал FrameLayout и LinearLayout, и разницы нет.
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:orientation="vertical">
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout >
В моем фрагменте для моей страницы ViewPager я создаю экземпляр WebView следующим образом
webView = v.findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setDomStorageEnabled(true);
webView.setWebChromeClient(...);
webView.setWebViewClient(...);
ОБНОВЛЕНИЕ (16 ноября 2016 г.)
Я на самом деле сузил это, чтобы вызвать содержимое WebView.
Если я использую другой URL-адрес в своем WebView, я вижу встроенные элементы управления масштабированием, и при перемещении представления я вижу, что «canScrollXXX» теперь возвращает true, а calculateXXXXRange/computeXXXXScrollOffset/computeXXXXScrollExtent все имеют правильные значения, а смещение даже изменяется в зависимости от того, где я нахожусь в поле зрения. С моим желаемым содержимым HTML эти методы не возвращают допустимые значения, а встроенные элементы управления масштабированием никогда не видны.
Поэтому мне нужно определить, что в HTML заставит WebView перестать возвращать допустимые значения для "canScrollXXX"/computeXXXXRange/computeXXXXScrollOffset/computeXXXXScrollExtent и остановить отображение встроенных элементов управления масштабированием.