You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Android TextView控件中指定字符串的显示颜色

实现方案

完全可以仅修改TextView的部分文本颜色,下面提供两种适配你需求的实现方式:

方案1:HTML标签拼接(完全匹配你想要的拼接写法需求)

Android TextView原生支持解析基础HTML标签,无需引入第三方HTML库,直接在拼接字符串时给需要改色的部分包裹<font>标签即可,不会修改全局文本颜色,仅作用于标签包裹的内容。

示例代码(Kotlin)

// 预先配置用户名对应的色值,可按需调整
val colorMapping = mapOf(
    "Tom" to "#FF0000",
    "Jack" to "#00FF00",
    "Sam" to "#0000FF"
)
var htmlText = ""
// 遍历JSON键值对拼接内容
jsonObject.keys().forEach { username ->
    val msgContent = jsonObject.getString(username)
    // 按你需要的方式拼接,仅给用户名套颜色标签
    htmlText += "<font color='${colorMapping[username]}'>$username</font>: $msgContent<br/>"
}
// 处理后设置给TextView
textView.text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    Html.fromHtml(htmlText, Html.FROM_HTML_MODE_LEGACY)
} else {
    Html.fromHtml(htmlText)
}

注意事项

  • 直接调用系统自带的android.text.Html类即可,不会出现第三方库修改全局颜色的问题
  • 换行需要用<br/>标签替代普通\n才能正常解析

方案2:SpannableStringBuilder实现(性能更优,支持扩展更多样式)

如果后续需要给文本加点击事件、粗体、斜体等更多样式,推荐用原生Spannable实现,无需解析HTML,性能更好:

示例代码(Kotlin)

val spannableBuilder = SpannableStringBuilder()
val colorMapping = mapOf(
    "Tom" to Color.RED,
    "Jack" to Color.GREEN,
    "Sam" to Color.BLUE
)
jsonObject.keys().forEach { username ->
    val msgContent = jsonObject.getString(username)
    val startPos = spannableBuilder.length
    spannableBuilder.append("$username: $msgContent\n")
    // 仅给用户名部分设置颜色
    spannableBuilder.setSpan(
        ForegroundColorSpan(colorMapping[username]!!),
        startPos,
        startPos + username.length,
        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
    )
}
textView.text = spannableBuilder

内容的提问来源于stack exchange,提问作者GLHF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 20:24:05