TextView 局部文本樣式設置

開發中常遇到要彈出文本提示窗的需求,而且文本內容要突出某些點,所以要對局部文本進行樣式設置,特整理 “局部文本” 樣式設置的幾種情形。

1、在 strings.xml 文件中直接使用 Android 支持的標籤

<string name="content">111<font color="red">222</font>333</string>
<TextView
        ... ...
        android:text="@string/content" />


但是,不能採用下面這種樣式,即是說,上面這種方法可採用的顏色有限

<string name="content">111<font color="#ff0000">222</font>333</string>


如果在代碼中直接 setText,則設置的顏色無效,採用默認字體顏色

tvTipContent.setText(getString(R.string.content));

2、在 strings.xml 文件中使用 html 樣式

    <string name="html_tip">
        <Data><![CDATA[
        <p>1、第一項:
        <br/>&nbsp;&nbsp;&nbsp;第一行第一項
        <br/>&nbsp;&nbsp;&nbsp;第一行第二項
        <br/>&nbsp;&nbsp;&nbsp;<font color="#ff0000"><b>第一行第三項</b></font></p>
        <p>2、第二項</p>
        3、第三項
        ]]></Data>
    </string>
<TextView
        ... ...
        android:text="@string/html_tip" />


如果在代碼中直接 setText(getString(R.string.html_tip)),則設置的顏色及 html 效果均無效,採用默認字體顏色

tvTipContent.setText(getString(R.string.html_tip));


如果要設置的顏色及 html 效果有效,需使用 Html.fromHtml() 方法

tvTipContent.setText(Html.fromHtml(getString(R.string.html_tip)));


需要注意的是,上面使用 Html.fromHtml() 方法,要達到 html 樣式,需要在要顯示的文本內容外層套上下面的標籤

    <string name="html_tip">
        <Data><![CDATA[
        ... ...
        ]]></Data>
    </string>

3、在代碼中直接設置拼接的字符串

下面這種方式無效

tvTipContent.setText("11<font color=&#34;red&#34;>22</font>33");


下面這種方式無效

        tvTipContent.setText(Html.fromHtml("<Data><![CDATA[\n" +
                "        <p>1、第一項:\n" +
                "        <br/>&nbsp;&nbsp;&nbsp;第一行第一項\n" +
                "        <br/>&nbsp;&nbsp;&nbsp;第一行第二項\n" +
                "        <br/>&nbsp;&nbsp;&nbsp;<font color=\"#ff0000\"><b>第一行第三項</b></font></p>\n" +
                "        <p>2、第二項</p>\n" +
                "        3、第三項\n" +
                "        ]]></Data>"));


去掉外層的 <Data><![CDATA[... ...]]></Data> 後纔有效

        tvTipContent.setText(Html.fromHtml(
                "        <p>1、第一項:\n" +
                "        <br/>&nbsp;&nbsp;&nbsp;第一行第一項\n" +
                "        <br/>&nbsp;&nbsp;&nbsp;第一行第二項\n" +
                "        <br/>&nbsp;&nbsp;&nbsp;<font color=\"#ff0000\"><b>第一行第三項</b></font></p>\n" +
                "        <p>2、第二項</p>\n" +
                "        3、第三項"));

4、使用 SpannableString 類

SpannableString sStr = new SpannableString("設置指定 Index 的字體樣式");
sStr.setSpan(new ForegroundColorSpan(Color.parseColor("#ff0000")), 3, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
sStr.setSpan(new ForegroundColorSpan(Color.RED), 11, 13, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tvTipContent.setText(sStr);

SpannableString 還有很多用法,能達到很炫酷的文本樣式,可自行使用體會 …

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章