長押しリンクのURL取得
Webページのリンクを長押ししたら
リンクをクリップボードへコピー
とか
リンク先の保存などをするときに
長押しリンクのURL取得を利用する
WebViewを長押ししたときのイベントを取得するには
長押しを有効にして
長押しのイベントリスナーをセットする
長押しの有効には
WebViewクラスの
setLongClickable()
長押しイベントリスナーのセットには
WebViewクラスの
setOnLongClickListener()
を使う
まず、
implements OnLongClickListener
を追記
private WebView mWebView;
でアクセスしやすくする
次に、onCreate()の中で
mWebView = new WebView(this); setContentView(mWebView);
これでビュー作成と配置
mWebView.setSettings().setJavascriptEnabled(true);
でJavascriptを使えるようにしておく
mWebView.setLongClickable(true);
で長押し有効に
mWebView.setOnLongClickListener(this);
で長押しリスナーセット
mWebView.setWebViewClient(new WebViewClient()); mWebView.loadUrl("http://www.google.co.jp/");
でWebページ表示
次に、HitTestResult からデータの取り出し
HitTestResultは
ユーザーがアクションを起こした対象の箇所の情報を保持するクラス
WebViewクラスの
getHitTestResult()
で取得できる
さらにそこから長押し対象を判定し、URLを取得する
@Override public boolean onLongClick(View v){ if(v == mWebView){ //長押しした箇所の情報を取得 HitTestResult hittestresult = mWebView.getHitTestResult(); //長押し対象の判定 switch(hittestresult.getType()){ case hittestresult.SRC_ANCHOR_TYPE: //長押しがアンカーリンクの処理 String url = hittestresult.getExtra(); Toast.makeText(this, "url: "+ url, Toast.LENGTH_SHORT).show(); break; } } return false; }
今回は、HitTestResult.SRC_ANCHOR_TYPEなので、HTMLのaタグのリンクを取得している
ほかにも
EDIT_TEXT_TYPE
EditTextの場合
EMAIL_TYPE
メールアドレスの場合
GEO_TYPE
地図情報の場合
IMAGE_TYPE
HTMLのimgタグの場合
PHONE_TYPE
電話番号の場合
SRC_IMAGE_ANCHOR_TYPE
HTMLのaタグで、imgタグを囲んでいる場合
UNKNOWN_TYPE
不明なターゲットの場合
これは、何もないところの長押しとか
通常のテキストの長押しの場合適用される