当前位置 : 主页 > 手机开发 > android >

android webview.scrollTo无效

来源:互联网 收集:自由互联 发布时间:2021-06-11
我在onPageFinished函数中调用webview.scrollTo,但它没有做任何事情. public void onPageFinished(WebView view, String url) { // TODO Auto-generated method stub super.onPageFinished(view, url); webview.scrollTo(0, scrollY); } 知道
我在onPageFinished函数中调用webview.scrollTo,但它没有做任何事情.

public void onPageFinished(WebView view, String url) 
    {
        // TODO Auto-generated method stub
        super.onPageFinished(view, url);
        webview.scrollTo(0, scrollY);
    }

知道为什么吗?
完成加载后如何自动滚动页面?

在我看来,在onPageFinished,onProgressChanged,WebView.scrollTo的完成和网页的显示(实际绘制到屏幕)之间存在竞争条件.

显示页面后,WebView“认为”它已滚动到您的滚动位置.

要进行测试,您可以验证WebView.getScrollY()是否返回了您想要的内容,但页面的显示不在该位置.

要解决此问题,以下是在页面显示后立即滚动到Y的非确定性方法:

...
    webView = (WebView) view.findViewById(R.id.web_view_id);
    webView.loadData( htmlToDisplay, "text/html; charset=UTF-8", null);
    ...
    webView.setWebViewClient( new WebViewClient() 
    { ... } );
    webView.setWebChromeClient(new WebChromeClient() 
    {
        ...

        @Override
        public void onProgressChanged(WebView view, int progress) {
            ...
            if ( view.getProgress()==100) {
                // I save Y w/in Bundle so orientation changes [in addition to
                // initial loads] will reposition to last location
                jumpToY( savedYLocation );
            }
        }

     } );

    ...

  private void jumpToY ( int yLocation ) {
      webView.postDelayed( new Runnable () {
          @Override
          public void run() {
              webView.scrollTo(0, yLocation);
          }
      }, 300);
  }

300 ms的最终参数似乎允许系统在调用jumpToY之前“追赶”.根据运行的平台,您可能会使用该值.

希望这可以帮助

-麦克风

网友评论