LoginSignup
1
1

More than 5 years have passed since last update.

[Android]WebViewClientでアンカーリンクのタップをフックする

Last updated at Posted at 2019-04-12

WebViewClientでアンカーリンクのタップをフックする

あまりないケースだと思いますが、AndroidのWebViewでWeb画面上のアンカーリンク (ページ内リンク)のタップをフックして、そのタイミングでアプリ側で何か動作させたい時の備忘録です。

例: WebViewをScrollViewに含めるとアンカーリンクが効かなくなるので、アンカーリンクのタップをアプリ側でフックして、ScrollViewをスクロールさせたい

WebViewとネイティブのViewを一緒にスクロールさせたい時に上のような実装にすることがあります

ハマった点: WebViewClientのshouldOverrideUrlLoadingはページ内リンクのタップでは呼ばれない

最初はWebViewClientのshouldOverrideUrlLoadingでUrl見てページ内リンクだった時にどうこうすればいいじゃん!って思ってたんですが、shouldOverrideUrlLoadingは同一ページ内のリンクの場合呼ばれないんですね...

解決: WebViewClientのonPageFinishedなら呼ばれる

ページ内リンクのタップ時にshouldOverrideUrlLoadingは呼ばれませんがonPageFinishedが呼ばれます。
引数でUrlも取れるので、ここでどうこうしてあげれば大丈夫です。
例えばページ内リンクが以下のような感じだとします。

<a href="#top">一番上に戻る</a> 

WebViewClientを使って以下のように記述すればOKです

 webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url) {
                if(url.contains("#top")) {
                    /** ここにしたいことを書く **/
                }
            }
        });

以上です。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1