【Android】TextViewで表示した文字にメールアドレス、電話番号、URLリンクを付ける方法


概ねタイトル通りです。

TextViewにリンクを付ける方法です。
挙動としてはhtmlのリンクタグみたいな感じですね。

アプリから他のアプリを呼び出す方法としてはインテント(暗黙的Intent)などがありますが、
今回はLinkifyクラスを使った方法を紹介してみます。



使い方はとても簡単。
リンクを付けたいTextViewをLinkify.addLinks関数の引数に入れるだけです。

TextViewにメールアドレスリンクを付ける


テキストビューにメールアドレスをセットして、
第二引数をLinkify.EMAIL_ADDRESSESにします。

TextView text_mail = new TextView(this);

text_mail.setText("sample@test.com");
Linkify.addLinks( text_mail, Linkify.EMAIL_ADDRESSES );



【実行結果】
Linkify、メールアドレスのリンク01

メールアドレスのリンク


Linkify、メールアドレスのリンク02

メールアドレスのリンク クリック後




TextViewに電話番号リンクを付ける


続いて電話番号。
今度は引数をLinkify.PHONE_NUMBERSにします。

TextView text_tel = new TextView(this);

text_tel.setText("090-0909-0909");
Linkify.addLinks( text_tel, Linkify.PHONE_NUMBERS);



【実行結果】
Linkify、電話番号のリンク01

電話番号のリンク


Linkify、電話番号のリンク02

電話番号のリンク クリック後




TextViewにURLリンクを付ける

最後にURL
引数はLinkify.WEB_URLSです。

TextView text_url = new TextView(this);

text_url.setText("http://blog.oukasoft.com");
Linkify.addLinks( text_url, Linkify.WEB_URLS);



【実行結果】
Linkify、URLのリンク01

URLのリンク


Linkify、URLのリンク02

URLのリンク クリック後






今回は1つずつ引数の種類を選んで登録しましたが、
Linkify.ALL を使えば自動で判定してくれるみたいですね。
賢いなさすがAndroidかしこい。


今回の3つのケースをまとめたサンプルです。

サンプルブログラム


public class Sample20120625Activity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LinearLayout ll = new LinearLayout(this);
        ll.setOrientation(LinearLayout.VERTICAL);
        setContentView(ll);

        //TextViewを生成
        TextView text_mail  = new TextView(this);
        TextView text_tel  = new TextView(this);
        TextView text_url = new TextView(this);

        //リンクを付けるテキストをセット
        text_mail.setText("Mail : sample@test.com");
        text_tel.setText("電話番号 : 090-0909-0909");
        text_url.setText("URL : http://blog.oukasoft.com");


        //リンクに変換
        Linkify.addLinks( text_mail, Linkify.EMAIL_ADDRESSES );
        Linkify.addLinks( text_tel, Linkify.PHONE_NUMBERS);
        Linkify.addLinks( text_url, Linkify.WEB_URLS);

        //レイアウトにセット
        ll.addView(text_mail);
        ll.addView(text_tel);
        ll.addView(text_url);

    }
}



暗黙的Intentを使うより楽チンですね。(^ω^)


関連記事

コメントは受け付けていません。