TextView部分文字加粗

开发中经常遇到TextView中部分文字加粗或者颜色不同的场景
一般使用SpannableString就能解决。例如:

    private void testText1(String posName) {
        String text = "* 为你发布的 " + posName + " 添加一句宣传语吧!";
        SpannableString span = new SpannableString(text);
        span.setSpan(new ForegroundColorSpan(Color.RED), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        span.setSpan(new ForegroundColorSpan(Color.CYAN), 7, 7 + posName.length() + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        span.setSpan(new ForegroundColorSpan(Color.BLACK), text.length() - 5, text.length() - 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        span.setSpan(new StyleSpan(Typeface.BOLD), text.length() - 5, text.length() - 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv1.setText(span);
        /**
         * 其中最后的参数flag:
         * Spanned.SPAN_EXCLUSIVE_EXCLUSIVE --- 不包含两端start和end所在的端点 (a,b)
         * Spanned.SPAN_EXCLUSIVE_INCLUSIVE --- 不包含端start,但包含end所在的端点 (a,b]
         * Spanned.SPAN_INCLUSIVE_EXCLUSIVE --- 包含两端start,但不包含end所在的端点 [a,b)
         * Spanned.SPAN_INCLUSIVE_INCLUSIVE --- 包含两端start和end所在的端点 [a,b]
         */
    }

效果图如下:
在这里插入图片描述
虽然这种方式能设置很多特效,但是setSpan的需要传入起始值的下标,字符串往往是后台给出一部分,app端写死一部分,哪个位置加粗变色都需要我们手动数出下标,真是让人掉头发。所以我更喜欢使用html,例如这样:

    private void testText2(String posName) {
        String text = "<font color= \"#ff0000\">* </font>为你发布的"
                + "<font color= \"#00ff00\"> " + posName + " </font>"
                + "添加一句宣传语吧!";
        tv2.setText(Html.fromHtml(text));
    }

效果是这样的:

在这里插入图片描述
但是使用html加粗文字时需要格外注意:需要使用<b><tt>需要加粗文字</tt></b>,其他没效果的

    private void testText2(String posName) {
        String text = "<font color= \"#ff0000\">* </font>为你发布的"
                + "<font color= \"#00ff00\"> " + posName + " </font>"
                + "添加一句"
                + "<b><tt>宣传语</tt></b>" 
                + "吧!";
        tv2.setText(Html.fromHtml(text));
    }

但是使用TextView.setText(Html.fromhtml(text);有个bug,假如text包含1+1<3等包含类似html标签的小于号,且没有大于号配对时,会出现文字不全情况。
在这里插入图片描述
在这里插入图片描述
并没有找到合适的解决方案:

只是发现了一些可能有用的帖子:

Strange issue with android:ellipsize=“end”

android ellipsize multiline textview

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值