1. ホーム
  2. android

[解決済み] TextViewの中に複数のスタイルを持たせることは可能ですか?

2022-03-18 03:35:41

質問

TextView内の異なるテキストに複数のスタイルを設定することは可能ですか?

例えば、以下のようにテキストを設定しています。

tv.setText(line1 + "\n" + line2 + "\n" + word1 + "\t" + word2 + "\t" + word3);

テキスト要素ごとに異なるスタイルを設定することは可能ですか?例:line1 bold、word1 italicなど。

デベロッパーガイドの Androidでよくあるタスクとその実行方法 には テキストの一部を選択、ハイライト、スタイリングする :

// Get our EditText object.
EditText vw = (EditText)findViewById(R.id.text);

// Set the EditText's text.
vw.setText("Italic, highlighted, bold.");

// If this were just a TextView, we could do:
// vw.setText("Italic, highlighted, bold.", TextView.BufferType.SPANNABLE);
// to force it to use Spannable storage so styles can be attached.
// Or we could specify that in the XML.

// Get the EditText's internal text storage
Spannable str = vw.getText();

// Create our span sections, and assign a format to each.
str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
str.setSpan(new BackgroundColorSpan(0xFFFFFF00), 8, 19, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
str.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 21, str.length() - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

しかし、これではテキスト内に明示的な位置番号を使用しています。もっとすっきりした方法はないのでしょうか?

どのように解決するのですか?

という方のために、一つの方法をご紹介します。(マークさんに感謝です!)。

mBox = new TextView(context);
mBox.setText(Html.fromHtml("<b>" + title + "</b>" +  "<br />" + 
            "<small>" + description + "</small>" + "<br />" + 
            "<small>" + DateAdded + "</small>"));

このメソッドでサポートされるタグの非公式なリストについては、以下を参照してください。 このリンク またはこの質問 Android TextViewが対応しているHTMLタグは何ですか?