可跨页字符串:使用Spans设置文本样式
文本样式是增强Android应用程序UI的重要方面之一。在Android中,我们可以更改文本的大小,颜色,重量,样式等,并使文本更具吸引力和吸引力。
但是想想一种情况,当你希望为TextView的不同部分使用不同的颜色时。例如,如果文本是“你好安卓”,并且您希望将“你好”的颜色设置为绿色,将“Android”的颜色设置为红色。您如何实现这一目标?您可以创建两个文本视图,并将文本颜色分别设置为绿色和红色。但这不是一个好方法。因此,在 Span 的帮助下,样式文本的作用就来了。
在这篇博客中,我们将学习如何使用 Span 来设置应用程序中使用的文本的样式。我们将介绍以下主题:
- 什么是Spans?
- 在文本视图中为不同的单词更改不同的颜色
- 可跨音标志
- 更改文本视图某些部分的背景色
- 同一文本的多个跨度
- 同一文本视图中字符串的不同字体大小
- 为文本视图中部分文本添加下划线
- 设置文本视图可点击部分
- 在安卓中添加项目符号列表
什么是Spans?
Spans 是用于在字符级别(例如,更改不同单词的颜色)或在段落级别(例如,制作项目符号列表)设置文本样式的标记对象。
为了在 Span 的帮助下设置文本样式,可以使用以下三个类:
- 跨度字符串:当在创建文本或标记后无需修改文本或标记时,将使用此选项。
- 跨线字符串:当不需要修改文本但需要修改标记(即需要向文本添加一些跨度)时,可以使用此功能。
- 可跨接字符串构建器:当您需要修改文本和标记时,将使用此选项。
这是关于安卓中跨度的快速介绍。现在,让我们看看它的一些用例。在我们的所有示例中,我们将使用以下具有 id 的文本视图:tvMessage
<TextViewandroid:id="@+id/tvMessage"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="8dp"android:gravity="center"android:textColor="@color/black"android:textSize="24sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent"tools:text="Hello World!" />
在文本视图中为不同的单词更改不同的颜色
在某些情况下,您可能希望为同一文本视图的不同部分使用不同的颜色。因此,在这里您可以使用
.ForegroundColorSpanval spannable = SpannableString("You can start learning Android from MindOrks")
spannable.setSpan(ForegroundColorSpan(Color.RED),36, // start44, // endSpannable.SPAN_EXCLUSIVE_INCLUSIVE
)
tvMessage.text = spannable
在这里,我们将“明多克斯”的颜色更改为红色。上述代码的输出将是:
如果你看一下代码,你会发现我们正在使用这个类,因为我们有一个固定的文本。此外,我们正在使用该方法设置文本的前景色,从字符串中的第 36 个位置开始,到第 44 个位置结束。此外,我们正在传递一些标志,即SPAN_EXCLUSIVE_INCLUSIVE。SpannableStringsetSpanSpannable.
让我们来了解一下这些标志。
可跨音标志
有许多标志可以与 Span 一起使用,但最常用的标志是:
- SPAN_EXCLUSIVE_EXCLUSIVE
- SPAN_EXCLUSIVE_INCLUSIVE
- SPAN_INCLUSIVE_EXCLUSIVE
- SPAN_INCLUSIVE_INCLUSIVE
这些标志用于告诉 Span 是否应包括在开始或结束位置插入的文本。“非独占”表示将其添加到“范围”,“独占”表示将其从“范围”中删除。
如果您使用的是不可变字符串,即如果您没有使用原始字符串添加其他字符串,则所有四个标志都将相同。但是,如果您使用的是可变字符串,那么这四个标志的作用将发挥作用。让我们借助示例来理解这一点。
在这里,我们将在原始字符串中插入一些文本。因此,如前所述,对于可变字符串,我们需要使用
.SpannableStringBuilder
val spannableStringBuilder = SpannableStringBuilder("Android")
spannableStringBuilder.setSpan(ForegroundColorSpan(Color.RED),1, // start4, // endSpannable.SPAN_INCLUSIVE_INCLUSIVE
)
spannableStringBuilder.insert(4, "1")
spannableStringBuilder.insert(1, "1")
tvMessage.text = spannableStringBuilder
所有四个标志的相应输出如下所示:
同一文本的多个跨度
您也可以根据需要多次使用该方法处理单个文本。例如,如果要更改文本的颜色,请同时将其设置为粗体和斜体,则可以通过以下方式执行此操作:setSpan
val spannable = SpannableString("You can start learning Android from MindOrks")
spannable.setSpan(ForegroundColorSpan(Color.RED),36, // start44, // endSpannable.SPAN_EXCLUSIVE_INCLUSIVE
)
spannable.setSpan(StyleSpan(Typeface.BOLD_ITALIC),36, // start44, // endSpannable.SPAN_EXCLUSIVE_INCLUSIVE
)
tvMessage.text = spannable
在这里,文本的颜色是红色,同时是粗体和斜体。上述代码的输出将是:
您可以根据需要多次使用该方法。setSpan
更改文本视图某些部分的背景色
您可以使用 更改文本视图中文本的某些部分的背景色。BackgroundColorSpan
val spannable = SpannableString("You can start learning Android from MindOrks")
spannable.setSpan(BackgroundColorSpan(Color.RED),36, // start44, // endSpannable.SPAN_EXCLUSIVE_INCLUSIVE
)
tvMessage.text = spannable
在这里,我们将背景更改为红色。上述代码的输出将是:
同一文本视图中字符串的不同字体大小
可以使用.BackgroundColorSpan
更改TextView中某些文本部分的背景色
val spannable = SpannableString("You can start learning Android from MindOrks")
spannable.setSpan(RelativeSizeSpan(2f),36, // start44, // endSpannable.SPAN_EXCLUSIVE_INCLUSIVE
)
tvMessage.text = spannable
在这里,“MindOrks”的大小比其他文字大。上述代码的输出将是:2f
为文本视图中部分文本添加下划线
您可以使用如下方式为部分文本添加下划线:UnderlineSpan
val spannable = SpannableString("You can start learning Android from MindOrks")
spannable.setSpan(UnderlineSpan(),36, // start44, // endSpannable.SPAN_EXCLUSIVE_INCLUSIVE
)
tvMessage.text = spannable
上述代码的输出将是:
设置文本视图可点击部分
您可以使用 设置文本视图的某些部分,这些部分可单击。例如:ClickableSpan
val spanText = SpannableStringBuilder("MindOrks")val clickableMindOrks = object : ClickableSpan() {override fun onClick(view: View) {Toast.makeText(view.context, "MindOrks Clicked!", Toast.LENGTH_SHORT).show()}
}
spanText.setSpan(clickableMindOrks,0,spanText.length,0
)
spanText.setSpan(ForegroundColorSpan(Color.RED),0, // start8, // endSpannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
tvMessage.setText(spanText, TextView.BufferType.SPANNABLE)
在这里,单击“明多克斯”时,将显示一个祝酒词。上述代码的输出将是:
在安卓中添加项目符号列表
借助 ,您可以在应用程序中创建项目符号列表,以简短而简单的方式显示一些信息。BulletSpan
// function to covert a list into bullet list
fun convertToBulletList(stringList: List<String>): CharSequence {val spannableStringBuilder = SpannableStringBuilder("Learn Android from\n")stringList.forEachIndexed { index, text ->val line: CharSequence = text + if (index < stringList.size - 1) "\n" else ""val spannable: Spannable = SpannableString(line)spannable.setSpan(BulletSpan(15, Color.RED),0,spannable.length,Spanned.SPAN_INCLUSIVE_EXCLUSIVE)spannableStringBuilder.append(spannable)}return spannableStringBuilder
}
val androidResourceList = listOf("MindOrks Course", "MindOrks Blog", "MindOrks OpenSource", "MindOrks YouTube")
tvMessage.text = convertToBulletList(androidResourceList)
上述代码的输出将是:
因此,通过这种方式,我们可以使用 Spans 来设置应用程序中存在的文本的样式。
希望你今天学到了一些新东西,我相信你很快就会在你的应用程序中使用这些很棒的功能。
可跨页字符串:使用Spans设置文本样式相关推荐
- 按钮 每一行_word跨页表格如何重复设置表头?单击“重复标题行”按钮来设置多页表格重复标题行显示。...
教师们经常需要将一张表格需要在文档中多页跨页显示,则设置标题行重复显示很有必要,因为这样会在每一页都明确显示表格中的每一列所代表的实际意义,方便我们查找和校对数据. 第一步:打开需要设置表格标题行重复 ...
- [转载]Word中大表格正确跨页断行的设置
原文地址:Word中大表格正确跨页断行的设置作者:上山上山兔 Word在默认设置的情况下,大表格的跨页总是会让人比较郁闷一些.当表格中恰好逢到换页处的单元格只包含一两行文字的时候问题不是很突出, ...
- 前端学习笔记之——设置文本样式
设置文本样式 1.应用基本文本样式 1.1.对齐文本 有好几个属性可以用来设计文本内容的对齐方式. 属性 说明 值 text-align 指定文本块的对齐方式 start end left right ...
- 【CSS】设置文本样式
大家好,我是翼同学! 目录 1️⃣前言 2️⃣文本样式
- Markdown设置文本样式
文本样式 Size:规定文本的尺寸大小,取值从 1 到 7 ,浏览器默认值是 3. <font face="黑体">我是黑体字</font> <fon ...
- 计算机操作员 word2003 设置表格的跨页断行属性,不可以,word中的表格属性不勾选“允许跨页断行”为什么还是断行了?-为什么word跨页表格,word表格不能跨页...
不能跨页断行,是因为设置了指定高度造成的. 1.首先双击打开需要编辑的Word文档,进入到Word文档编辑界面中. 2.接下来需要鼠标左键单击Word表格zd,鼠标右键单击选择打开菜单栏中的" ...
- phpexcel_cell 获取表格样式_Java 操作Word表格——创建嵌套表格、添加/复制表格行或列、设置表格是否禁止跨页断行...
精品推荐 国内稀缺优秀Java全栈课程-Vue+SpringBoot通讯录系统全新发布! Docker快速手上视频教程(无废话版)[免费] 作者:E-iceblue https://www.cnblo ...
- java操作跨页的word cell_Java 操作Word表格——创建嵌套表格、添加/复制表格行或列、设置表格是否禁止跨页断行...
本文将对如何在Java程序中操作Word表格作进一步介绍.操作要点包括 如何在Word中创建嵌套表格. 对已有表格添加行或者列 复制已有表格中的指定行或者列 对跨页的表格可设置是否禁止跨页断行 创建表 ...
- Java 操作Word表格——创建嵌套表格、添加/复制表格行或列、设置表格是否禁止跨页断行
本文将对如何在Java程序中操作Word表格作进一步介绍.操作要点包括 如何在Word中创建嵌套表格. 对已有表格添加行或者列 复制已有表格中的指定行或者列 对跨页的表格可设置是否禁止跨页断行 创建表 ...
最新文章
- Opencv java模板匹配-角点检测(11)
- OBjective-C:文件管理类NSFileManager
- 学python需要什么基础知识-学习python需要什么基础
- YOLO Object Detection with OpenCV
- poj1273Drainage Ditches
- 10倍提升应用性能的10个建议
- 学习 shell —— 条件判断 if 的参数
- oninput、onchange、onpropertychange的区别
- DVWA中学习PHP常见漏洞及修复方法
- innobackupex工作原理
- 优酷暗黑模式(三):暗黑模式设计指南
- 给惠普735g5 装Win10+Ubuntu 16.04双系统
- qq游戏大厅中解析不安装apk的研究
- 转 纸牌屋1-4集分析
- 虚拟机的安装、网关配置及安装man命令
- 逆向工程实验Lab7
- pq分解法matlab程序,基于MATLAB软件的PQ分解法潮流计算
- 林业大学计算机专业排名2019,2021年北京林业大学最新排名 全国最新排名
- App 打包提交APP Store途中遇到蛋疼的ERROR ITMS-90035
- 激光打印机常见加粉问题与使用技巧