本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点
SpannableString
在 Android 开发中是一个非常强大的工具,它允许你在单个字符串范围内应用多种样式。使用 SpannableString
,你可以为文本中的不同部分设置不同颜色,字体大小,字体风格,甚至可以在文本的不同部分添加点击事件。
下面是一个详细的介绍以及一些常见效果的具体代码示例:
基本介绍
SpannableString
是 CharSequence
的一个子类,用于在一个字符串上应用一种或多种样式。常见的样式可以通过 What
类实现,如:
ForegroundColorSpan
:设置文本颜色BackgroundColorSpan
:设置文本背景颜色StyleSpan
:设置文本风格,如粗体,斜体UnderlineSpan
:设置文本下划线StrikethroughSpan
:设置文本删除线ClickableSpan
:设置文本可点击RelativeSizeSpan
:设置文本相对大小
基本使用示例
// 创建一个 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
)
应用文字大小
// 创建一个 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
)
设置可点击事件
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()
综合示例
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查看更多精彩文章!