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 还有很多用法,能达到很炫酷的文本样式,可自行使用体会 …

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