Androidアプリ開発者のためのTips集。今回は一部だけ色を変える、太字にするといった“文字修飾”の方法や、文字列中に画像およびリンクを埋め込む方法を紹介する。
用途 | 便利 |
---|---|
カテゴリ | 画面部品 |
レベル | 中級 |
動作確認環境 | Android 2.3.1(GingerBread) エミュレータにて動作確認 |
備考 | 今回のTipsは上記環境で動作確認・検証を行っています |
文字列をTextViewに表示する際に、一部だけ色を変える、太字にするといったような複雑な修飾を行いたいケースもあるだろう。そのような場合には、「Html」クラスを使用するとよい。
android.text.HtmlクラスのfromHtml()メソッドを使用すると、HTML形式で記述した文字列から修飾済みテキストを生成できる。
// 文字修飾のサンプル void spannedSample_1( TextView tView ){ Spanned spanned = Html.fromHtml( "文字色<br>" + "<font color='#ff0000'>赤</font>" + "<font color='#888800'>黄</font>" + "<font color='#00ff00'>緑</font>" + "<font color='#008888'>青緑</font>" + "<font color='#0000ff'>青</font>" + "<font color='#880088'>紫</font><br>" + "<big>大きく</big><small>小さく</small>"); tView.setText(spanned); }
fromHtml()メソッドでは、HTMLの全てのタグが有効なわけではないが、<IMG>タグは有効である。そのため、文字列中に画像を埋め込むことができる。
<IMG>タグを使用するためには、表示する画像を読み込むための処理をあらかじめ記述しておく必要がある。
具体的には、android.text.Html.ImageGetterインタフェースを実装して、fromHtml()メソッドにパラメータとして渡す。
// 画像埋め込みのサンプル void spannedSample_2( TextView tView ){ Spanned spanned = Html.fromHtml( "みなさん、あけまして<img src='sun'>おめでとうございます<img src='banzai'><br>" + "今年もよろしくお願いします<img src='star'><img src='droid'><img src='star'>", mImageGetter, null ); tView.setText(spanned); } // テキストに画像を埋め込むためのイメージゲッターの例 Html.ImageGetter mImageGetter = new Html.ImageGetter() { public Drawable getDrawable(String source) { // source の値に応じて、drawable ディレクトリに // 配置した画像を選択する int resId = R.drawable.droid; if( "banzai".equals(source) ){ resId = R.drawable.banzai; } else if( "sun".equals(source)){ resId = R.drawable.sun; } else if( "star".equals( source ) ){ resId = R.drawable.star; } // drawableリソースから画像を読み込んで40x40サイズで表示 Drawable dr = getResources().getDrawable(resId); dr.setBounds(0, 0, 40, 40); return dr; } };
<IMG>タグと同じく、<A>タグも有効なので、文字列中にHTMLリンクを埋め込むことができる。
埋め込んだHTMLリンクを実際に機能させるためには、TextViewにLinkMovementMethodを設定する必要がある。
LinkMovementMethodのインスタンスは、staticメソッドを使用して取得したものをそのまま設定すればよい。
// HTMLリンク埋め込みのサンプル void spannedSample_3( TextView tView ){ // TextView に LinkMoveMethod を設定する tView.setMovementMethod( android.text.method.LinkMovementMethod.getInstance()); Spanned spanned = Html.fromHtml( "@IT MONOist へは<a href='//monoist.atmarkit.co.jp/'>コチラ</a>から"); tView.setText(spanned); }
「コチラ」のリンク部分をタップすると、Webブラウザが起動する(画像4)。
≫連載「Androidアプリケーション開発者のためのTips集」の目次
Copyright © ITmedia, Inc. All Rights Reserved.