お使いのブラウザは、バージョンが古すぎます。

このサイトは、Internet Explore8・Internet Explore9には対応しておりません。
恐れ入りますが、お使いのブラウザをバージョンアップしていただきますよう宜しくお願いいたします。

【Android】TextViewの文字装飾を行う時に気を付けたいこと

こんにちわ。pencoです。
今回はさらっと、備忘録的な感じのお話です。
 
TextView にセットした文字列に、下線をつけたり、一部の文字色だけ変えたり太字にしたいことってあると思います。

 
そんな時はandroid.text.Html クラスのfromHtml() メソッドを使います。

fromHtml()メソッド

このメソッドを使うと、HTML形式で記述したテキストを解釈し、文字装飾を行ってくれます。
 
例えばこんな感じで書くと、

String str = "アメリカの発明家で有名な<u>トーマス・エジソン</u>が残した名言は次のうちどれか。1つ選べ。";
textview.setText(Html.fromHtml(str));

 
この様になります。
device-2014-08-05-121856
 
fromHtml() メソッドで使用できるタグなどはこちらのサイト様を参考にさせて頂きました。
– Google Android – 雑記帳
 

htmlタグのエスケープ

 
ただ、今回私がやろうとしていたことは「外部XMLから読み込んだ長文の一部の文字列を装飾する」ことだったので、上記のままではXMLのパースに問題が発生してしまいます。そのため、HTMLタグをエスケープしておくことが必要でした。
 
以下は使用している外部XMLの一部です。

<id>2</id>
<question>アメリカの発明家で有名な&lt;u&gt;トーマス・エジソン&lt;/u&gt;が残した名言は次のうちどれか。1つ選べ。</question>

 
問題となる<>表記をエスケープしています。
エスケープした<>は、XMLパース後に再度置き換える必要などはなく、そのままfromHtml() メソッドにセットすれば、同様の表現が可能です。
 
このタグのエスケープは、文字列をstring.xml などのリソースから呼び出す場合も同様です。
 
 
もう1点注意したいのが、改行コードです。
通常、改行には「\n」を使用していますが、fromHtml() メソッドにセットする場合はこの改行コードでは効きません。HTMLの改行<br /> に置換する必要があります。

//String str = "アメリカの発明家で有名な<u>トーマス・エジソン</u>が残した名言は次のうちどれか。\n1つ選べ。";
String str = "アメリカの発明家で有名な<u>トーマス・エジソン</u>が残した名言は次のうちどれか。<br />1つ選べ。";
textview.setText(Html.fromHtml(str));

 
 
今日はこの辺で。
 

コメントをどうぞ

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


お気軽にお問い合わせください。

日本VTR実験室では、お仕事のご依頼、ブログ・コラムのご感想などを受け付けております。
アプリ開発・コンテンツ制作でお困りでしたら、お気軽にご相談ください。
ご連絡お待ちしております。

お問い合わせはこちらから

03-3541-1230

info@nvtrlab.jp

電話受付対応時間:平日AM9:30〜PM6:00