Android经典实战之Textview文字设置不同颜色、下划线、加粗、超链接等效果

本文首发于公众号"AntDream",欢迎微信搜索"AntDream"或扫描文章底部二维码关注,和我一起每天进步一点点

SpannableString 在 Android 开发中是一个非常强大的工具,它允许你在单个字符串范围内应用多种样式。使用 SpannableString,你可以为文本中的不同部分设置不同颜色,字体大小,字体风格,甚至可以在文本的不同部分添加点击事件。

下面是一个详细的介绍以及一些常见效果的具体代码示例:

基本介绍

SpannableStringCharSequence 的一个子类,用于在一个字符串上应用一种或多种样式。常见的样式可以通过 What 类实现,如:

  • ForegroundColorSpan:设置文本颜色
  • BackgroundColorSpan:设置文本背景颜色
  • StyleSpan:设置文本风格,如粗体,斜体
  • UnderlineSpan:设置文本下划线
  • StrikethroughSpan:设置文本删除线
  • ClickableSpan:设置文本可点击
  • RelativeSizeSpan:设置文本相对大小

基本使用示例

kotlin 复制代码
// 创建一个 SpannableString 对象
val spannableString = SpannableString("Hello, Android Developers!")

// 设置文本 'Hello' 为红色
spannableString.setSpan(
    ForegroundColorSpan(Color.RED),
    0, // 开始索引
    5, // 结束索引
    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)

// 设置文本 'Android Developers' 为粗体
spannableString.setSpan(
    StyleSpan(Typeface.BOLD),
    7,
    25,
    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)

// 给文本 'Developers' 添加下划线
spannableString.setSpan(
    UnderlineSpan(),
    15,
    25,
    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)

应用文字大小

kotlin 复制代码
// 创建一个 SpannableString 对象
val spannableStringSize = SpannableString("Big and small text")

// 'Big' 字段相对比例放大1.5倍
spannableStringSize.setSpan(
    RelativeSizeSpan(1.5f),
    0, 
    3,
    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)

// 'small' 字段相对比例缩小至0.7倍
spannableStringSize.setSpan(
    RelativeSizeSpan(0.7f),
    8, 
    13,
    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)

设置可点击事件

kotlin 复制代码
val spannableStringClickable = SpannableString("Click here to learn more!")

val clickableSpan = object : ClickableSpan() {
    override fun onClick(widget: View) {
        // 在这里处理点击事件
        Toast.makeText(widget.context, "Clicked!", Toast.LENGTH_SHORT).show()
    }

    override fun updateDrawState(ds: TextPaint) {
        super.updateDrawState(ds)
        ds.isUnderlineText = true // 设置下划线
    }
}

// 设置 'Click here' 可点击
spannableStringClickable.setSpan(
    clickableSpan,
    0, 
    10,
    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)

// textView 需要设置movementMethod
val textView = findViewById<TextView>(R.id.textview)
textView.text = spannableStringClickable
textView.movementMethod = LinkMovementMethod.getInstance()

综合示例

kotlin 复制代码
val comprehensiveSpannable = SpannableString("Red Bold And Click Me")

// 设置红色文字
comprehensiveSpannable.setSpan(
    ForegroundColorSpan(Color.RED),
    0, 
    3,
    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)

// 设置粗体文字
comprehensiveSpannable.setSpan(
    StyleSpan(Typeface.BOLD),
    4,
    8,
    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)

// 设置可点击文字
val clickableSpanComprehensive = object : ClickableSpan() {
    override fun onClick(widget: View) {
        // 处理点击事件
        Toast.makeText(widget.context, "Text Clicked!", Toast.LENGTH_SHORT).show()
    }

    override fun updateDrawState(ds: TextPaint) {
        super.updateDrawState(ds)
        ds.isUnderlineText = true // 设置下划线
    }
}

comprehensiveSpannable.setSpan(
    clickableSpanComprehensive,
    13, 
    21,
    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)

val comprehensiveTextView = findViewById<TextView>(R.id.comprehensive_textview)
comprehensiveTextView.text = comprehensiveSpannable
comprehensiveTextView.movementMethod = LinkMovementMethod.getInstance()

总结

使用 SpannableString,我们可以在单个字符串内灵活应用多种样式和效果。以上示例展示了如何设置文本颜色,字体样式,添加下划线,设置文字大小和添加点击事件。通过组合这些效果,你可以实现丰富的文本展示和交互效果。


欢迎关注我的公众号AntDream查看更多精彩文章!

相关推荐
奋斗的小乌龟1 小时前
动态创建Agent02
java
ZFSS1 小时前
Localization Translate API 集成与使用指南
java·服务器·数据库·人工智能·mysql·ai编程
摇滚侠1 小时前
Java 零基础全套教程,集合框架,笔记 153-163
java·开发语言·笔记
nannan12321 小时前
后端技术栈梳理
java
不知名的忻2 小时前
B 树与 B+ 树:面试完全指南
b树·算法·面试·b+树
莞凰2 小时前
昇腾CANN的“灵脉根基“:Runtime仓库探秘
android·人工智能·transformer
L、2182 小时前
CANN算子开发调试实战:从“Segmentation Fault“到定位根因的完整流程
java·开发语言
索木木3 小时前
NCCL SHARP 和 TREE算法
java·服务器·算法
NiceCloud喜云3 小时前
Claude Files API 深入:从上传、复用到配额管理的工程化指南
android·java·数据库·人工智能·python·json·飞书
ujainu3 小时前
CANN pto-isa:虚拟指令集如何连接编译与执行
android·ascend