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

简介: 本文介绍了 `SpannableString` 在 Android 开发中的强大功能,包括如何在单个字符串中应用多种样式,如颜色、字体大小、风格等,并提供了详细代码示例,展示如何设置文本颜色、添加点击事件等,助你实现丰富文本效果。

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

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

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

基本介绍

SpannableStringCharSequence 的一个子类,用于在一个字符串上应用一种或多种样式。常见的样式可以通过 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查看更多精彩文章!

目录
相关文章
|
5月前
|
Android开发 开发者
Android设置View是否可用
在Android开发中,有时需要将布局设置为不可点击状态(失去焦点)。常见的解决方法是使用`setOnClickListener(null)`,但本文介绍一种更通用的方式:通过封装`setViewEnabled`方法实现。该方法可递归设置View及其子View的启用状态,支持传入目标View和布尔值(`true`为可用,`false`为禁用)。例如,调用`setViewEnabled(edittext, false)`即可禁用EditText。文章附有源码及示例动图,帮助开发者快速理解与应用。
113 1
|
5月前
|
Android开发 开发者
Android中Dialog位置+样式的设置
本文介绍了在Android开发中如何设置Dialog的位置和样式。通过自定义`MyDialog`类,可以灵活调整Dialog的显示位置,例如将其固定在屏幕底部,并设置宽度匹配父布局。同时,文章还展示了如何模仿Android原生Dialog样式,通过定义`MyDialogStyle`去除标题栏、设置背景透明度、添加阴影效果以及配置点击外部关闭等功能,从而实现更加美观和符合需求的Dialog效果。代码示例详细,便于开发者快速上手实现。
348 2
|
XML API Android开发
码农之重学安卓:利用androidx.preference 快速创建一、二级设置菜单(demo)
本文介绍了如何使用androidx.preference库快速创建具有一级和二级菜单的Android设置界面的步骤和示例代码。
425 1
码农之重学安卓:利用androidx.preference 快速创建一、二级设置菜单(demo)
|
XML 存储 Java
浅谈Android的TextView控件
浅谈Android的TextView控件
114 0
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
503 0
|
Android开发 iOS开发 C++
Flutter中设置Android的应用名称和图标(android,ios,web)
在前面的几期给大家介绍了flutter的安装以及一些简单的配置,还运行了helloword 那么接下来就带领大家了解如何设置应用名称以及图标
405 0
|
1月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
313 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
1月前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
129 6
|
3月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
253 11
|
3月前
|
移动开发 Java 编译器
Kotlin与Jetpack Compose:Android开发生态的演进与架构思考
本文从资深Android工程师视角深入分析Kotlin与Jetpack Compose在Android系统中的技术定位。Kotlin通过空安全、协程等特性解决了Java在移动开发中的痛点,成为Android官方首选语言。Jetpack Compose则引入声明式UI范式,通过重组机制实现高效UI更新。两者结合不仅提升开发效率,更为跨平台战略和现代架构模式提供技术基础,代表了Android开发生态的根本性演进。
129 0

热门文章

最新文章