0

ページが自動的に WebView を Html のタイトルの 1 つにスクロールし、左上隅に id = "my_header" が表示されるようにします。私のフラグメントがロードされたときにそれを行う方法は?

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);
4

1 に答える 1

0

要素まで下にスクロールしたいだけで、ロードしているページにアクセスできる場合は、javascript で、ページのロード時に次のようにすることができます。

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

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

この質問を参照してください: 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 スクロール コードのみを呼び出すロジックを簡単に追加できます。

于 2014-09-23T08:42:01.867 に答える