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查看更多精彩文章!

目录
相关文章
|
8月前
|
XML 存储 Java
浅谈Android的TextView控件
浅谈Android的TextView控件
90 0
|
10月前
|
数据处理 开发工具 数据安全/隐私保护
Android平台RTMP推送|轻量级RTSP服务|GB28181接入之文字、png图片水印的精进之路
本文探讨了Android平台上推流模块中添加文字与PNG水印的技术演进。自2015年起,为了满足应急指挥及安防领域的需求,逐步发展出三代水印技术:第一代为静态文字与图像水印;第二代实现了动态更新水印内容的能力,例如实时位置与时间信息;至第三代,则优化了数据传输效率,直接使用Bitmap对象传递水印数据至JNI层,减少了内存拷贝次数。这些迭代不仅提升了用户体验和技术效率,也体现了开发者追求极致与不断创新的精神。
119 7
|
编解码 Android开发
Android 解决TextView多行滑动与NestedScrollView嵌套滑动冲突的问题
Android 解决TextView多行滑动与NestedScrollView嵌套滑动冲突的问题
262 0
|
Android开发 iOS开发 C++
Flutter中设置Android的应用名称和图标(android,ios,web)
在前面的几期给大家介绍了flutter的安装以及一些简单的配置,还运行了helloword 那么接下来就带领大家了解如何设置应用名称以及图标
348 0
|
19天前
|
安全 Java Android开发
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
46 0
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
|
3月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
605 76
|
4月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
297 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
4月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
121 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
4月前
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
107 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
5月前
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
266 12
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程