WebViewでクリックされたアンカーテキストなどのURLを取得する方法

WebView上でアンカーや画像がクリックされたときにそのURLなどを知るにはタッチされた時点でのHitTestResultオブジェクトを取得します。

HitTestResultクラスはタッチされたデータの種類を識別するためのものでgetTypeメソッドでデータの種類を知ることができます。

取得できるデータの種類

取得できるデータの種類はHitTestResultクラスの中でint型で定義されていて、値には次のものがあります。

定数名種類
EDIT_TEXT_TYPE入力されたテキスト
EMAIL_TYPEEメールアドレス
GEO_TYPE住所など
PHONE_TYPE電話番号
SRC_ANCHOR_TYPEテキストのアンカー
SRC_IMAGE_ANCHOR_TYPE画像アンカー
UNKNOWN_TYPE不明

データの識別例

例としてアンカーテキストがクリックされたときにそのURLをログに出力するようなコードを紹介します。

それが次のコードです。

public class MainActivity extends FragmentActivity 
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final WebView webView = (WebView) view.findViewById(R.id.searchWebView);
        webView.setOnTouchListener(new OnTouchListener()
        {
            @Override
            public boolean onTouch(View v, MotionEvent event) 
            {
                int action = event.getAction();
                switch(action){
                case MotionEvent.ACTION_UP:
                    HitTestResult result = webView.getHitTestResult();
                    if(result != null){
                        int type = result.getType();
                        if(type == HitTestResult.SRC_ANCHOR_TYPE
                                || type == HitTestResult.SRC_IMAGE_ANCHOR_TYPE){
                            String anchor_url = result.getExtra();
                            Log.i("MainActivity : ", "アンカーURL = " + anchor_url);
                        }
                    }
                    break;
                }
                return false;
            }
        }
    }
}

少し見にくいですがWebViewでタッチイベントが起こったらタッチされたデータの種類を取得するような処理をしています。

テキストまたは画像のアンカーがタッチされたときにはgetHitTestResultのタイプがSRC_ANCHOR_TYPEまたはSRC_IMAGE_ANCHOR_TYPEになります。それを判別してgetExtaraメソッドでデータの内容を取得しています。

関連項目
プライバシーポリシー