90
81

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

TextView の一部のリンク化+クリックイベントの指定、をサクッと作る

Last updated at Posted at 2014-11-27

はじめに

ss.png

利用規約やプライバシーポリシーなど、テキストの一部にリンクを付けてブラウザに飛ばしたいときなどにコピペして使えるメモです。SpannableString を使いますが、これが結構面倒なのでまとめました。

リンク対象のテキストの指定には正規表現を使っていて、複数のリンクをまとめて同時につけられます。onClick の中身を変えれば、ブラウザに飛ばす以外のアクションにも使えます。

コード

SampleFragment.java

private void setSpannableString(View view) {

    String message = "利用規約、プライバシーポリシーに同意する。";

    // リンク化対象の文字列、リンク先 URL を指定する
    Map<String, String> map = new HashMap<String, String>();
    map.put("利用規約", "http://hogehoge.com/rules");
    map.put("プライバシーポリシー", "http://hogehoge.com/policies");

    // SpannableString の取得
    SpannableString ss = createSpannableString(message, map);

    // SpannableString をセットし、リンクを有効化する
    TextView textView = (TextView) view.findViewById(R.id.text);
    textView.setText(ss);
    textView.setMovementMethod(LinkMovementMethod.getInstance());
}

private SpannableString createSpannableString(String message, Map<String, String> map) {

    SpannableString ss = new SpannableString(message);

    for (final Map.Entry<String, String> entry : map.entrySet()) {
        int start = 0;
        int end = 0;

        // リンク化対象の文字列の start, end を算出する
        Pattern pattern = Pattern.compile(entry.getKey());
        Matcher matcher = pattern.matcher(message);
        while (matcher.find()) {
            start = matcher.start();
            end = matcher.end();
            break;
        }

        // SpannableString にクリックイベント、パラメータをセットする
        ss.setSpan(new ClickableSpan() {
            @Override
            public void onClick(View textView) {
                String url = entry.getValue();
                Uri uri = Uri.parse(url);
                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                startActivity(intent);
            }
        }, start, end, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
    }

    return ss;
}

参考

http://developer.android.com/reference/android/text/SpannableString.html
http://developer.android.com/reference/android/text/Spanned.html

90
81
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
90
81

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?