長押しリンクのURL取得

長押しリンクの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
不明なターゲットの場合
これは、何もないところの長押しとか
通常のテキストの長押しの場合適用される

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です