2014-09-23 76 views
0

我希望页面自动滚动WebView到我的HTML标题中的一个,其id =“my_header”位于左上角。如何在我的Fragment加载时执行此操作?动态滚动WebView

WebView myWebView = (WebView) v.findViewById(R.id.web_view); 
myWebView.setWebViewClient(new WebViewClient()); 
myWebView.getSettings().setSupportZoom(true); 
myWebView.getSettings().setUseWideViewPort(true); 
myWebView.getSettings().setBuiltInZoomControls(true); 
myWebView.loadUrl(resource); 
+1

通常,如果你想滚动到一个'ID',你可以追加'#my_header'到URL的末尾。试试看,看看它是否有效。例如:http://stackoverflow.com/questions/25990208/scroll-webview-dynamically#post-editor – musefan 2014-09-23 08:52:48

回答

0

如果你只是想向下滚动到一个元素,您可以访问到您正在加载,JavaScript中的页面,你可以做这样的事情在页面加载:

var container = $('div'), 
    scrollTo = $('#my_header'); 

container.scrollTop(
    scrollTo.offset().top - container.offset().top + container.scrollTop() 
); 

见这个问题: How to scroll to specific item using jQuery?

如果你不希望修改底层的资源,那么你可以在下面的Java代码添加到您的WebView,这将调用JavaScript代码之上,一旦加载页面:

WebView myWebView = (WebView)v.findViewById(R.id.web_view); 
myWebView.getSettings().setSupportZoom(true); 
myWebView.getSettings().setUseWideViewPort(true); 
myWebView.getSettings().setBuiltInZoomControls(true); 
myWebView.getSettings().setJavaScriptEnabled(true); 
myWebView.setWebChromeClient(new WebChromeClient()); 
myWebView.setWebViewClient(new WebViewClient() { 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     String javascript = "javascript:" 
      + "var container = $('div'),scrollTo = $('#my_header');" 
      + "container.scrollTop(scrollTo.offset().top - container.offset().top + container.scrollTop());"; 
     view.loadUrl(javascript); 
    } 
}); 

// Finally, load the page 
myWebView.loadUrl(resource); 

请注意,只要任何页面由该WebViewClient加载,就会运行javascript 。如果需要的话,您可以轻松添加逻辑来仅调用特定页面的JavaScript滚动代码。

+0

这不是一个JavaScript问题......如果解决方案是运行一些JavaScript,那么你应该包括如何根据问题 – musefan 2014-09-23 08:50:44

+0

注入/运行javascript使用'WebView'我的假设是,他们将有权修改页面(即添加javascript到它)。我已经更新了我的答案,指出如何在任何页面上运行JavaScript,一旦它加载完成。 – 2014-09-23 09:22:12