Android 自动滚动Webview
我想让我的网络视图自动滚动。下面是我尝试过的,它确实会滚动webview,但不会停止,即即使webview没有可显示的内容,它也会继续,因此它只显示白色屏幕。请告诉我怎么修理Android 自动滚动Webview,android,webview,scroll,autoscroll,Android,Webview,Scroll,Autoscroll,我想让我的网络视图自动滚动。下面是我尝试过的,它确实会滚动webview,但不会停止,即即使webview没有可显示的内容,它也会继续,因此它只显示白色屏幕。请告诉我怎么修理 webview.setPictureListener(new PictureListener() { public void onNewPicture(WebView view, Picture picture) { webview.scrollBy
webview.setPictureListener(new PictureListener() {
public void onNewPicture(WebView view, Picture picture) {
webview.scrollBy(0, 1);
}
});
试试我的代码,希望它能帮上忙:) 向下滚动:
mWebView.post(new Runnable() {
public void run() {
if (mWebView.getContentHeight() * mWebView.getScale() >= mWebView.getScrollY() ){
mWebView.scrollBy(0, (int)mWebView.getHeight());
}
}
});
向上滚动
mWebView.post(new Runnable() {
public void run() {
if (mWebView.getScrollY() - mWebView.getHeight() > 0){
mWebView.scrollBy(0, -(int)mWebView.getHeight());
}else{
mWebView.scrollTo(0, 0);
}
}
});
此代码适用于自动滚动以及滚动下降,然后自动到达顶部,然后再次启动滚动。 检查是否有任何查询更新我
Timer repeatTask = new Timer();
repeatTask.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
int height = (int) Math.floor(webView.getContentHeight() * webView.getScale());
int webViewHeight = webView.getMeasuredHeight();
if (webView.getScrollY() + webViewHeight >= height) {
webView.scrollBy(0, 0);
webView.scrollTo(0, 0);
} else {
webView.scrollBy(webView.getTop(), webView.getBottom());
}
}
});
}
}, 0, 5000);//delayed auto scroll time
据我所知,在现代Android上实现这一点的唯一方法是使用JavaScript:
webView.webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView?, url: String?) {
webView.evaluateJavascript("""
|var _fullScrollIntervalID = setInterval(function() {
| if (window.scrollY + window.innerHeight >= document.body.scrollHeight) {
| window.clearInterval(_fullScrollIntervalID);
| } else {
| window.scrollBy(0, 10);
| }
|}, 17);
""".trimMargin(), null)
}
}
JavaScript API知道内容的大小
如果document.body
不是滚动元素等,此解决方案不考虑更改视口大小
对于基于Java的解决方案,Java API似乎给出了视图的大小,而不是页面的长度:
- 高度
- 内容高度
- 测量高度
- 底部
onPageFinished
后,它在短时间内返回false。你可以推迟一些时间来解决这个问题。例如:
webView.webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView?, url: String?) {
ScrollRunnable().run()
}
}
// ...
val h = Handler()
inner class ScrollRunnable() : Runnable {
override fun run() {
// introduce some delay here!
if (webView.canScrollVertically(1)) {
webView.scrollBy(0, 10)
h.postDelayed(this, 17L)
}
}
}
我在安卓API26模拟器和安卓TV API 22模拟器上进行了测试