首页 > 其他分享 >Android经典实战之Textview文字设置不同颜色、下划线、加粗、超链接等效果

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

时间:2024-09-04 15:23:56浏览次数:11  
标签:EXCLUSIVE Spannable 下划线 setSpan SpannableString 设置 Android 文本 Textview

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

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

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

标签:EXCLUSIVE,Spannable,下划线,setSpan,SpannableString,设置,Android,文本,Textview
From: https://blog.51cto.com/u_16841384/11918207

相关文章

  • 2-STM32F103+ML307(中移4G Cat1)基本控制篇(自建物联网平台)-整体运行测试-Android扫
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ZLIOTB/ML307/my.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p>  说明这节测试一......
  • android java BufferedWriter writer 需要关闭资源吗?
    在Android开发中,使用Java的`BufferedWriter`或其他类似的I/O资源时,**确实需要关闭资源**。这是因为:1.**释放系统资源**:关闭`BufferedWriter`会释放与之关联的底层资源,如文件句柄。2.**保证数据完整性**:确保所有写入操作完成并刷新缓冲区,这样数据才能被完整地写入到文件中。......
  • Android开机流程-从Init进程启动到进入Android桌面
    1.init进程启动流程Androidbootloader负责加载boot.img,将其内容放入内存,然后启动内核。内核接管之后,会解压并加载ramdisk到内存中,然后启动用户空间的第一个进程init。在Android系统启动过程中,ramdisk.img被内核直接解压到内存中并用作初始根文件系统。这一过程不是通过......
  • Android使用addr2line分析Native Crash
    NDK提供的工具将函数地址解析为具体的函数名和行数才能进一步分析问题。常用的地址转换工具有addr2line、ndk-stack等,个人比较喜欢addr2line,所以接下来介绍下该工具的基本使用方式日常使用过程中,只需要关注-C-f-e三个参数即可//-C:Demangle函数名//-f:显示函数名//......
  • Android Gradle 插件的说明
    1、前天运行好好的项目,今天运行就报错:这个意思是Gradle版本低了这个意思是Gradleplugin(8.5.1)最高的compileSdk=34,用了35,就不对,因为一开始我们安装的就是35的版本,我们可以安装下34,然后用34就可以了。2、GradlePlugin这是一种写法,我们也可以这样,用alias,用一个文件......
  • android kotlin基础复习—for while do...while
    1、新建一个文件kt:2、循环的几种用法:forwhiledo...whilefor:println("----for使用-----")valitems=listOf("apple","banana","kiwi")for(iteminitems){println(item)}for(indexinitems.indic......
  • 基于Android的小学数学游戏App的开发与设计-计算机毕业设计源码+LW文档
    摘 要利用了现代科技手段,将传统的小学数学教育与游戏娱乐相结合,为孩子们创造了一个更加轻松、有趣的学习环境。通过游戏化的方式,孩子们能够在玩乐中掌握数学知识,提升逻辑思维能力,激发学习兴趣。这种寓教于乐的学习方式不仅能够减轻孩子们的学习压力,还能有效提高学习效果,为他们今......
  • 深入理解Android Activity的四种LaunchMode
            在Android开发中,Activity的启动模式(LaunchMode)是控制Activity实例创建、复用及在任务(Task)中排列方式的重要机制。理解并掌握这些模式对于构建高效、流畅的用户体验至关重要。本文将详细探讨standard、singleTop、singleTask和singleInstance这四种启动模式,并通......
  • BroadcastReceiver 广播-Android四大组件 一文精讲
    目录1.广播用途与机制1.1什么时候用broadcast?1.2原理图解2.注册广播2.1静态注册2.2动态注册2.3二者区别与联系同:异:3.接受广播3.1接收系统广播3.2接收自定义附带值广播4.发送自定义广播4.1发送无序广播4.2发送有序广播4.3发送应用程序内部广播1.广播用途与......
  • Android开发 - BitmapFactory 类解码图像文件并转换为 Bitmap 对象与 BitmapFactory.O
    BitmapFactory是什么BitmapFactory用于解码图像文件,并将它们转换为Bitmap对象。Bitmap是用来表示图像的基本类,它是一个位图的抽象表示。BitmapFactory提供了一组静态方法,这些方法可以用来将各种图像文件格式(如PNG、JPEG、WEBP等)解码成Bitmap对象BitmapFactory的好......