AndroidのViewの一つであるTextViewでは、WebサイトのURLやメールアドレスに対してリンクを張ることが可能です。
今回は簡単な自己紹介画面を作成し、String型の文字列に定義したブログのURLやメールアドレスに、リンクを作成する方法をご紹介します。
続きをどうぞ
URLおよびメールアドレスにリンクを作成する
URLおよびメールアドレスにリンクを作成する方法は非常に簡単で、TextViewの属性を追加するだけで実現が可能です。
まず、String型の変数に、文字列として定義したURLとメールアドレスを、TextViewで表示してみます。
public class textview1 extends Activity { String nameStr ="seit"; //ブログのURL定義 String blogStr = "https://techbooster.org/"; //メールアドレス定義 String addressStr = "<メールアドレス>"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView nameLink = (TextView)findViewById(R.id.name_link); TextView blogLink = (TextView)findViewById(R.id.blog_link); TextView addressLink = (TextView)findViewById(R.id.address_link); nameLink.setText(nameStr); blogLink.setText(blogStr); addressLink.setText(addressStr); } }
ちなみに、nameLink、blogLinkおよびaddressLinkの各TextViewは、xmlファイルにて次のように定義されています。
<TextView android:id="@+id/name_link" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/blog_link" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/address_link" android:layout_width="fill_parent" android:layout_height="wrap_content" />
このままだと、上画像のように、URLとメールアドレスが、ただの文字列として画面上に表示されるだけです。
では、先ほどのURLおよびメールアドレスをリンクにしてみます。先ほどのTextViewの定義に、以下のように属性を追加します。
<TextView android:id="@+id/name_link" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/blog_link" android:layout_width="fill_parent" android:layout_height="wrap_content" android:autoLink="web" /> <TextView android:id="@+id/address_link" android:layout_width="fill_parent" android:layout_height="wrap_content" android:autoLink="email" />
autoLink属性を追加し、値をセットました。これだけで、下画像のように、URLおよびメールアドレスがリンクとなります。
リンクをタップすると、以下のようにリストが表示され、対応したアプリケーションが選択できるようになります。
ここで、URL押下時にはブラウザ、メールアドレス押下時にはメールクライアントがそれぞれ表示されるのは、属性に設定する値によります。
この値を正しく設定しないと、正常なリンクとなりません。メールアドレスのTextViewにandroid:autoLink=”web”を設定した場合、以下の例のように、メールアドレスにリンクは作成されません。
(例)メールアドレスにandroid:autoLink=”web”を設定した場合
autoLink属性には、以下の種類があります。
web | URLのリンク作成 |
メールアドレスのリンク作成 | |
phone | 電話番号のリンク作成 |
map | 住所のリンク作成 |
all | 上記すべてのリンク作成 |
HTMLタグを用いてリンクを作成する
TextViewにURLのリンクを張る場合には、autoLink属性を用いる以外に、もう一つHTMLタグを利用する方法があります。
※ここでは、HTML、HTMLタグとは何かについては、詳しく説明しません。
まず、HTMLタグの一つであるタグで囲まれたURLを含んだString型文字列を定義します。
属性hrefには、リンクさせたいサイトのURLを指定します。
String htmlBlogStr = "こちら<a href="\https://techbooster.org/\">Tech Booster</a>です";
定義した文字列を、HTMLタグを生かした形式に変換します。
CharSequence blogChar = Html.fromHtml(htmlBlogStr);
変換したCharSequence型文字列を、TextViewにセットします。
blogLink.setText(blogChar);
このままでは、リンクは表示されますが、リンクをクリックしてもイベントが拾えず、何も起きません。
そこで、TextViewに対してMonementMethodのインスタンスを取得し、セットすることで、イベントのリスナーを自動登録します。
MovementMethod mMethod = LinkMovementMethod.getInstance(); blogLink.setMovementMethod(mMethod);
以上で、下画像のように、「Tech Booster」の部分がリンク形式で表示され、クリックするとブラウザを選択することが可能となります。
HTMLを用いると、このように、直接URLではなく、文字列(ここでは「Tech Booster」)をリンクにすることが可能です。
全体のソースコードは以下の通りです。
public class TextLink extends Activity { String htmlNameStr = "<FONT color=\"red\"><I><B><BIG>seit</BIG></B></I></FONT>"; //ブログのURL定義 String htmlBlogStr = "こちら<a href="\https://techbooster.org/\">Tech Booster</a>です"; //メールアドレス定義 String addressStr = "<メールアドレス>"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView nameLink = (TextView)findViewById(R.id.name_link); TextView blogLink = (TextView)findViewById(R.id.blog_link); TextView addressLink = (TextView)findViewById(R.id.address_link); //TextViewをクリッカブルにする MovementMethod mMethod = LinkMovementMethod.getInstance(); blogLink.setMovementMethod(mMethod); //String文字列をHTMLタグを生かした形式に変換 CharSequence nameChar = Html.fromHtml(htmlNameStr); CharSequence blogChar = Html.fromHtml(htmlBlogStr); nameLink.setText(nameChar); blogLink.setText(blogChar); addressLink.setText(addressStr); } }
また蛇足ですが、TextViewにHTMLを用いることで、上画像の「seit」のように、文字列に装飾を施すことも可能です。
String htmlNameStr = "<FONT color=\"red\"><I><B><BIG>seit</BIG></B></I></FONT>";
<FONT>タグで色(赤)を指定し、<I>タグで文字列をイタリック体に、<B>タグで文字列をBoldにし、<BIG>タグで文字のサイズを大きくしています。