2016-04-06 11 views
2

私はAndroidアプリケーションに、loadDataWithBaseURL()メソッドを使用してHTML文字列を読み込んでいるWebViewを持っています。アンドロイドボタンからwebviewのアンカーリンクにスクロールする方法は?

w = (WebView)findViewById(R.id.webview); 
w.getSettings().setJavaScriptEnabled(true); 
String html = "<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Smooth Scroll</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- stylesheets --> <style type="text/css"> body { max-width: 40em; width: 88%; margin-left: auto; margin-right: auto; } </style> </head> <body> <main id="top"> <nav> <hr> </nav> <section> <p> <strong>Ease-Out</strong><br> <a data-scroll href="#ANCHORLINK">Quad</a><br> </p> <p> .<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br> .<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br> .<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>. </p> <p id="ANCHORLINK"><a data-scroll href="#[email protected]#%^-bottom">SCROLL TO ANCHOR LINK!</a></p> <p> .<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br> .<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br> .<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>.<br>. </p> </html>" 
w.loadDataWithBaseURL("http://bar",html,"text/html", "utf-8", ""); 

webviewのアンカーリンクにスクロールするためにアンドロイドボタンを使用したいと思います。どうやってするの?

答えて

0

String htmlが壊れています。エスケープスラッシュなしで二重引用符をネストしたからです。

また、WebViewをレイアウト内にScrollView内にネストしていないことを確認する必要があります。 WebViewには独自のスクロール機能があり、ScrollViewの中にネストすると正しく動作しない可能性があります。

次のようにあなたがアンドロイドボタンでそれを行うことができます。

protected void onCreate(Bundle savedInstanceState) {

w = (WebView)findViewById(R.id.webview); 
    w.getSettings().setJavaScriptEnabled(true); 
    String html = "<!DOCTYPE html> <html lang=\"en\"> <head>....<body><p id=\"top\">Top of the page content</p>....</body></html>"; 
    w.loadDataWithBaseURL("http://bar",html,"text/html", "utf-8", ""); 

    Button topButton = (Button) findViewById(R.id.topButton); 
    topButton.setOnClickListener(TopButtonHandler); 

を次にonCreate関数の外:

View.OnClickListener TopButtonHandler = new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     w.loadUrl("javascript:document.getElementById(\"top\").scrollIntoView()"); 
    } 
};` 

私はこれがでhtmlファイルで動作するようになりました私の資産フォルダ。文字列htmlの読み込みとは少し違います。しかし、文字列htmlは、ネストされた二重引用符のためにエスケープ・スラッシュを置くのを忘れるなど、何のエラーもない限り、同じ方法で動作するはずです。代わりにアンドロイドButtonを使用しての

、また、あなたの資産フォルダにあるHTMLファイル、内部でこのように動作するようにHTMLリンクを取得することができます。

その後、
<!DOCTYPE html> 
    <head> 
    .... 
    </head> 
    <body> 
    <p id="top">Content at the top of the page</p> 

    <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/> 
    <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/> 
    <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/> 

    <a href="#top">Go to Top</a> 

    </body> 
    </html> 

あなたはGo To Topリンクをクリックし、あなたのレイアウトにの中にWebViewを入れ子にしていなければ、ページは一番上の段落までスクロールします。

関連する問題