【Android】TextViewの文字装飾を行う時に気を付けたいこと
こんにちわ。pencoです。
今回はさらっと、備忘録的な感じのお話です。
TextView にセットした文字列に、下線をつけたり、一部の文字色だけ変えたり太字にしたいことってあると思います。
そんな時はandroid.text.Html クラスのfromHtml() メソッドを使います。
fromHtml()メソッド
このメソッドを使うと、HTML形式で記述したテキストを解釈し、文字装飾を行ってくれます。
例えばこんな感じで書くと、
String str = "アメリカの発明家で有名な<u>トーマス・エジソン</u>が残した名言は次のうちどれか。1つ選べ。"; textview.setText(Html.fromHtml(str));
この様になります。
fromHtml() メソッドで使用できるタグなどはこちらのサイト様を参考にさせて頂きました。
– Google Android – 雑記帳
htmlタグのエスケープ
ただ、今回私がやろうとしていたことは「外部XMLから読み込んだ長文の一部の文字列を装飾する」ことだったので、上記のままではXMLのパースに問題が発生してしまいます。そのため、HTMLタグをエスケープしておくことが必要でした。
以下は使用している外部XMLの一部です。
<id>2</id> <question>アメリカの発明家で有名な<u>トーマス・エジソン</u>が残した名言は次のうちどれか。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));
今日はこの辺で。
コメントをどうぞ