我在onPageFinished函数中调用webview.scrollTo,但它没有做任何事情. public void onPageFinished(WebView view, String url) { // TODO Auto-generated method stub super.onPageFinished(view, url); webview.scrollTo(0, scrollY); } 知道
public void onPageFinished(WebView view, String url) { // TODO Auto-generated method stub super.onPageFinished(view, url); webview.scrollTo(0, scrollY); }
知道为什么吗?
完成加载后如何自动滚动页面?
显示页面后,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之前“追赶”.根据运行的平台,您可能会使用该值.
希望这可以帮助
-麦克风