<< 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