Android WebView 滚动到底部

4

我想要在我的WebView中向下滚动页面。因此,我找到了函数.pageDown(true)。问题是这个函数对我来说并没有真正起作用,大多数情况下什么都不会发生。

代码片段:

wvChat.loadData(chat_, "text/html; charset=utf-8", "UTF-8");
                 wvChat.setWebViewClient(new WebViewClient() {
                     public void onPageFinished(WebView view, String url) {
                        wvChat.pageDown(true);
                     }
                 });

有没有其他方法可以使用,或者在onPageFinished中使用是错误的?

不确定,但我认为如果您将WebView放在ScrollView中的布局中,那么ScrollView可能会对您有所帮助。 - Ranjit
5个回答

7

获取HTML内容的高度并使用scrollTo(x,y)方法。

wvChat.loadData(chat_, "text/html; charset=utf-8", "UTF-8");
             wvChat.setWebViewClient(new WebViewClient() {
                 @Override
                 public void onPageFinished(WebView view, String url) {
                    //use the param "view", and call getContentHeight in scrollTo
                    view.scrollTo(0, view.getContentHeight());
                 }
             });

1
工作得更好,但有时会向上滚动到顶部而不是底部:哦,看起来键盘是问题所在,可能无法在键盘打开时向下滚动吗?因为它确实改变了Webview的高度。 - Phil

5
我有一个解决方案,可以使用scrollTo函数滚动大文件(很多行)。我将值设置得比内容高度高得多。
mWebView.setWebViewClient(new WebViewClient()
{
  @Override
  public void onPageFinished(WebView view, String url)
  {
    super.onPageFinished(view, url);     

    Handler lHandler = new Handler();
    lHandler.postDelayed(new Runnable()
    {             
      @Override
      public void run()
      {
        mWebView.scrollTo(0, 1000000000);
      }
    }, 200);
  } 
});

现在的问题是,对于小文件(少行),它不起作用,因为在WebView被渲染之前onPageFinished方法就被调用了,所以我必须使用延迟处理。


3
      wvChat.setWebViewClient(new WebViewClient() {
                     @Override
                     public void onPageCommitVisible(WebView view, String url) {
                        wvChat.pageDown(true);
                     }
                 });

尽快完成这个,不要拖延...


我不知道为什么这个回答被踩了,因为它是唯一正确的解决方案。 - A1m

0

0

您可以使用Javascript滚动WebView

private fun scrollMove(contentHeight: Float) {
    val speed = (contentHeight / 100) * 1000
    currentWebView?.evaluateJavascript("\$('html,body').animate({scrollTop:$contentHeight},$speed);", null)
}

提供的答案因为质量低被标记为需要审核。以下是如何撰写好的回答的一些指南。这个提供的答案可以从解释中受益。仅有代码的答案不被认为是“好”的答案。来自审核。 - Trenton McKinney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接