Android Html.fromHtml() 设置字体颜色

常见的设置字体颜色有:

1.在xml布局文件内:android:textColor="#9da4b3"

2.在代码里:

textView.setTextColor(ContextCompat.getColor(context, R.color.color_ffffff))

但是需求是不定的,有时候需要动态配置展示内容,或者对指定文本内容进行特殊处理,这时候我们就可以用到SpannableString 和 Html.fromHtml()

3.SpannableString:实现指定位置颜色,大小,特效,点击事件等等 ,详情点击下面链接: CheckBox复选框和SpannableStringhttps://blog.csdn.net/LoveFHM/article/details/108244239?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164552601316780255285349%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=164552601316780255285349&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-108244239.nonecase&utm_term=Span&spm=1018.2226.3001.4450

4.Html.fromHtml() 因为需求是展示一条消息字符串,但是里面有三个占位符,部分内容展示效果不同,且长度不定,所以用Spannable就会有点麻烦,于是便想到了Html.fromHtml().

具体使用:

    override fun init(data: ImMsgIn, chatType: Any) {
        if (childCount == 0) {
            addView(contentLayout)
        }
        val giftContent: String? = getGift(data)
        tvContent.text = Html.fromHtml(giftContent)
        tvContent.movementMethod = LinkMovementMethod.getInstance()
    }

    private fun getGift(data: ImMsgIn): String? {
        val isOwner = data.getSelfUserId() == data.getOwnerId()
        val senderName = data.getSenderName()
        val giftName = data.getGiftName()
        val changedSenderName = "<font color='#FEA30F'>$senderName</font>"
        val changedGiftName = "<font color='#FEA30F'>$giftName</font>"


        return if (!isOwner && data.getSenderId() != data.getSelfUserId())
            String.format(resources.getString(R.string.im_ui_gift_other_to_owner, changedSenderName, changedGiftName, data.getGiftAmount().toString(), data.getGroupName()))
        else if (!isOwner && data.getSenderId() == data.getSelfUserId()) {
            String.format(resources.getString(R.string.im_ui_gift_me_to_owner, changedGiftName, data.getGiftAmount().toString(), data.getGroupName()))
        } else if (isOwner) {
            String.format(resources.getString(R.string.im_ui_gift_owner, changedGiftName, data.getGiftAmount().toString(), changedSenderName))
        } else null
    }

展示效果:

  

注意事项:1、之前我在代码里,用的是            String.format(resources.getString(R.string.im_ui_gift_other_to_owner, Html.fromHtml(changedSenderName), Html.fromHtml(changedGiftName), data.getGiftAmount().toString(), data.getGroupName())). 想的是先变身,再拼接,结果发现颜色设置无效。

2、所以,Html.fromHtml()这个方法,要在拼接后再使用这个方法。即上面代码的        tvContent.text = Html.fromHtml(giftContent)

3、当然,val changedSenderName = "<font color='#FEA30F'>$senderName</font>" 可以在这里面对字体可以有更多的设置(粗体,大小,超链接),而Html.fromHtml(giftContent) 返回的其实也是个Spanned对象。

4、以下是android中提供的各种span及用途:(可能不完全,可以去看看源码)

BackgroundColorSpan 背景色
ClickableSpan 文本可点击,有点击事件
ForegroundColorSpan 文本颜色(前景色)
MaskFilterSpan修饰效果,如模糊(BlurMaskFilter)、浮雕(EmbossMaskFilter)
MetricAffectingSpan 父类,一般不用
RasterizerSpan 光栅效果
StrikethroughSpan 删除线(中划线)
SuggestionSpan 相当于占位符
UnderlineSpan 下划线
AbsoluteSizeSpan 绝对大小(文本字体)
DynamicDrawableSpan 设置图片,基于文本基线或底部对齐。
ImageSpan 图片
RelativeSizeSpan 相对大小(文本字体)
ReplacementSpan 父类,一般不用
ScaleXSpan 基于x轴缩放
StyleSpan 字体样式:粗体、斜体等
SubscriptSpan 下标(数学公式会用到)
SuperscriptSpan 上标(数学公式会用到)
TextAppearanceSpan 文本外貌(包括字体、大小、样式和颜色)
TypefaceSpan 文本字体
URLSpan 文本超链接

6月21日补充:如果发现设置了颜色无效,可以试试以下方法

1. 设置字体颜色的时候,颜色值需要转义符,如代码所示:

val timeshareName = "<font color=\"#22BB3B\">${timeShare?.name}</font>"

2.不要透明度, 我之前用的FF22BB3B发现颜色无效,把FF去掉后,颜色显示正常了

3.Html.fromHtml()过期(出现在Android7.0以后),只需要在传一个参数flags,其中flags可选两个参数:
Html.FROM_HTML_MODE_COMPACT:html块元素之间使用一个换行符分隔
Html.FROM_HTML_MODE_LEGACY:html块元素之间使用两个换行符分隔

参考文章:Android Html.fromHtml支持字体大小和加粗(可扩展)_forwardyzk的专栏-CSDN博客_android html.fromhtml先看效果图开发的时候,需要使用到富文本,如果用到了Html标签,系统不支持字体大小和加粗样式,那么就需要自己解析写.使用例子 String htmlStr2 = "<span style='color:#EE30A7;font-size:20px'>Html" + "<font color='...https://blog.csdn.net/forwardyzk/article/details/100930340?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-6.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-6.pc_relevant_paycolumn_v3&utm_relevant_index=8

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

&岁月不待人&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值