Прокрутите WebView динамически
Я хочу, чтобы однажды страница автоматически прокрутила WebView до одного из моих заголовков в Html с id = "my_header" в верхнем левом углу. Как это сделать, когда мой фрагмент загружен?
WebView myWebView = (WebView) v.findViewById(R.id.web_view);
myWebView.setWebViewClient(new WebViewClient());
myWebView.getSettings().setSupportZoom(true);
myWebView.getSettings().setUseWideViewPort(true);
myWebView.getSettings().setBuiltInZoomControls(true);
myWebView.loadUrl(resource);
1 ответ
Если вы просто хотите прокрутить вниз до элемента и у вас есть доступ к загружаемой странице в javascript, вы можете сделать что-то подобное при загрузке страницы:
var container = $('div'),
scrollTo = $('#my_header');
container.scrollTop(
scrollTo.offset().top - container.offset().top + container.scrollTop()
);
Смотрите этот вопрос: Как прокрутить до определенного элемента с помощью jQuery?
Если вы не хотите изменять базовый ресурс, вы можете добавить следующий код Java в WebView, который будет вызывать вышеуказанный код JavaScript после загрузки страницы:
WebView myWebView = (WebView)v.findViewById(R.id.web_view);
myWebView.getSettings().setSupportZoom(true);
myWebView.getSettings().setUseWideViewPort(true);
myWebView.getSettings().setBuiltInZoomControls(true);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.setWebChromeClient(new WebChromeClient());
myWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
String javascript = "javascript:"
+ "var container = $('div'),scrollTo = $('#my_header');"
+ "container.scrollTop(scrollTo.offset().top - container.offset().top + container.scrollTop());";
view.loadUrl(javascript);
}
});
// Finally, load the page
myWebView.loadUrl(resource);
Обратите внимание, что это будет запускать JavaScript, когда какая-либо страница загружается этим WebViewClient. Вы можете легко добавить логику, чтобы вызывать код прокрутки JavaScript только для конкретной страницы, если это необходимо.