Ref*_*Jan 3 android scroll webview
我在onPageFinished函数中调用webview.scrollTo,但它没有做任何事情.
public void onPageFinished(WebView view, String url)
{
// TODO Auto-generated method stub
super.onPageFinished(view, url);
webview.scrollTo(0, scrollY);
}
Run Code Online (Sandbox Code Playgroud)
知道为什么吗?完成加载后如何自动滚动页面?
小智 7
这在我看来,有完成之间的竞争条件onPageFinished, onProgressChanged,WebView.scrollTo,显示的网页(实际上在屏幕上绘图).
页面显示后,WebView"认为"它已滚动到您的scrollY位置.
要进行测试,您可以验证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);
}
Run Code Online (Sandbox Code Playgroud)
300 ms的最终参数似乎允许系统在调用jumpToY之前"追赶".根据运行的平台,您可能会使用该值.
希望这可以帮助
-麦克风
| 归档时间: |
|
| 查看次数: |
3594 次 |
| 最近记录: |