Android监听WebView滑动到底部的两种方式

第一种方式:

 webView.setOnCustomScrollChangeListener(new ScrollChangeLisWebView.ScrollInterface() {
     
        @Override
        public void onSChanged(int l, int t, int oldl, int oldt) {
     
            //WebView的总高度  有缩放比例
            float webViewContentHeight = webView.getContentHeight() * webView.getScale();
            //WebView的现高度
            float webViewCurrentHeight = (webView.getHeight() + webView.getScrollY());
            if ((webViewContentHeight - webViewCurrentHeight) < 50) {
       //或者用 == 0 在(自己调试即可)   已经处于底端
              //.....
            }
        }
    });

如果前端页面height写成100%,会导致webView.getScrollY()一直为0。

第二种方式:注入js

  webView.setWebViewClient(new WebViewClient() {
     
            @Override
            public void onPageFinished(WebView webView, String s) {
     
                super.onPageFinished(webView, s);
                //滑动监听
                String startSave = "\n" +
                        "document.getElementById(\"page-container\").addEventListener('scroll',function () {\n" +
                        "console.log(this.scrollHeight);\n" +
                        "console.log(this.scrollTop);\n" +
                        "console.log(this.clientHeight);\n" +
                        "if(this.scrollHeight-this.scrollTop - this.clientHeight < 50){\n" +
//                      "if(this.scrollHeight-this.scrollTop == this.clientHeight){\n" +     精度计算问题   会有一点误差  无法相等
                        "console.log(\"到达底部\");\n" +
                        "window.java.open(\"到达底部\"); \n" +
                        "}\n" +
                        "});";
                //注入
                webView.loadUrl("javascript:" + startSave);
            }
        });
        
        //注入、反射
        webView.addJavascriptInterface(new Object() {
     
            @JavascriptInterface
            public void open(String msg) {
     //滑动到底端
				//.....
				//这里更新UI失败的话,可以用runOnUiThread或者webView.post(new Runnable() {}
            }
        }, "java");

可以网页上直接拿上面代码调试即可。

你可能感兴趣的:(android)