<< Android-Note
WebViewでクリックされたアンカーテキストなどのURLを取得する方法
WebView上でアンカーや画像がクリックされたときにそのURLなどを知るにはタッチされた時点でのHitTestResultオブジェクトを取得します。
HitTestResultクラスはタッチされたデータの種類を識別するためのものでgetTypeメソッドでデータの種類を知ることができます。
取得できるデータの種類
取得できるデータの種類はHitTestResultクラスの中でint型で定義されていて、値には次のものがあります。
定数名 | 種類 |
---|---|
EDIT_TEXT_TYPE | 入力されたテキスト |
EMAIL_TYPE | Eメールアドレス |
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メソッドでデータの内容を取得しています。
© Kaz