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 还有很多用法,能达到很炫酷的文本样式,可自行使用体会 …
TextView 局部文本样式设置之二:SpannableString

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值