B4X为我们提供了一个功能强大的字符串操作工具CSBuilder对象(仅用于B4A、B4i)。
CSBuilder 类似 StringBuilder。 但与构建字符串不同, CSBuilder是通过操作字符序列来操作字符串,因此它也叫字符序列生成器,它构建了包含样式信息的字符序列。允许我们格式化字符串、添加图像、添加样式及可点击文本。
(本章节示例均为B4A示例,在B4i中大致相同)
一、操作文本
先看一个示例:
Private cs As CSBuilder
cs = cs.Initialize.Color(Colors.Red).Append("Hello World!").PopAll
Label1.Text = cs
Label1将显示:Hello World!。
CSBuilder的几乎所有方法都会返回对象本身,这允许我们将方法调用连接在一起。
文本总是由Append方法添加,可以设置各种属性。设置属性标志着一个样式域的开始。调用Pop将结束已添加的最后一个样式域(但尚未结束)。调用PopAll结束所有打开的样式域。总是在末尾调用PopAll,以确保关闭所有的样式域。
注意:Pop是用于关闭样式域的,一个Pop只能关闭一个样式域。
我们用下面几个语句体会一下Pop的用法和cs的写法(cs用一行连接所有方法和多行使用方法是一样的):
cs.Initialize.Color(Colors.Red).Append("Hello World!")
Label1.Text=cs
Label1显示:Hello World!,颜色没有起作用,因为最后没有关闭样式域。
cs.Initialize.Color(Colors.Red).Append("Hello World!").Pop
Label1.Text=cs
Label1显示:Hello World!,样式起作用了,因为Pop关闭了该样式域。
cs.Initialize.Append("Hello World!").Color(Colors.Red).Pop
Label1.Text=cs
Label1显示:Hello World!,样式没有起作用,因为样式应在文本之前添加。
cs.Initialize.Color(Colors.Red).Append("Hello ").Pop
cs.Append("World").PopAll
Label1.Text=cs
Label1显示:Hello World!,World没有样式,因为之前的样式已经关闭。
cs.Initialize.Color(Colors.Red).Append("Hello ").Pop
cs.Bold.Append("Colorful ").Color(Colors.Blue).Append("World!").PopAll
Label1.Text=cs
Label1显示:Hello Colorful World!,World!为粗体蓝色,因为之前的粗体样式没有关闭,任何样式没有关闭的话,后面文本都会保有此样式。
cs.Initialize.Color(Colors.Red).Append("Hello ")
cs.Bold.Append("Colorful ").Color(Colors.Blue).Append("World!").PopAll
Label1.Text=cs
Label1显示:Hello Colorful World!,Colorful为粗体红色,World!为粗体蓝色,因为任何样式没有关闭的话,后面的样式状态会累加,此情况下如果相同样式使用了不同属性,则后面的属性覆盖前面的属性。本例World!样式中蓝色样式覆盖了红色样式。
cs.Initialize.Color(Colors.Red).Bold.Append("Hello ").Pop
Label1.Text=cs
Label1显示:Hello,样式没有起作用,因为有两个样式,只用一个Pop没有完全关闭。使用两个Pop或PopAll才能使样式起作用。
备注:
cs语句最终末尾一定要使用PopAll,以确保关闭所有的样式域。前面的样式哪个不再使用就用Pop关闭,有几个样式就使用几个Pop。一条完整的cs语句总是以cs.Initialize开头,以PopAll结尾。例如:
cs.Initialize.Color(Colors.Red).Bold.Append("Hello ").Pop.pop
cs.Color(Colors.Blue).Append("World!").PopAll
二、使用 FontAwesome 或 MaterialIcons
使用方法示例:
Private cs As CSBuilder
cs.Initialize.Append("Text with FontAwesome: ")
cs.Typeface(Typeface.FONTAWESOME).Append(Chr(0xF209)).PopAll
Label1.Text = cs
Label1显示:
cs.Initialize.Append("Text with MaterialIcons: ")
cs.Typeface(Typeface.MATERIALICONS)
cs.VerticalAlign(5dip).Append(Chr(0xE531)).PopAll
Label1.Text = cs
Label1显示:
备注:
1、在页面代码模块的变量声明例程中声明一次,在子例程可多次使用同一个构建器。每次都要初始化它。也就是说每一条新的cs语句的第一个方法应当是Initialize。凡第一个方法不是Initialize(cs.Initialize)的,都不是新语句,它和上面的cs语句是一条语句。
2、Materialicons 字符的十六进制值以 0xE 开头,FontAwesome 字符的十六进制值以 0xF 开头。
三、插入图片
使用CSBuilder的Image方法向字符序列插入图片。语法如下:
Image(Bitmap As android.graphics.Bitmap,Width As Int,Height As Int,Baseline As Boolean)
参数:
Bitmap As android.graphics.Bitmap:安卓位图,可用LoadBitmap关键字加载图片;
Width / Height :加载后设定图片的宽度 / 高度。
Baseline:图片是否和文本基线对齐。True则和文本基线对齐,False则和文本最底端对齐。
Image方法和其它方法不同,你不需要调用Pop关闭该格式域,它自动关闭该格式域。
Dim Image1 As Bitmap
Private cs As CSBuilder
cs.Initialize.Size(18).Typeface(Typeface.MONOSPACE)
Image1=LoadBitmap(File.DirAssets, "1.jpg")
cs.Image(Image1, 60dip, 40dip, False).Append(" 1.jpg").Append(CRLF)
Image1=LoadBitmap(File.DirAssets, "2.jpg")
cs.Image(Image1, 60dip, 40dip, False).Append(" 2.jpg").Append(CRLF)
Image1=LoadBitmap(File.DirAssets, "3.jpg")
cs.Image(Image1, 60dip, 40dip, False).Append(" 3.jpg").Append(CRLF)
Image1=LoadBitmap(File.DirAssets, "4.jpg")
cs.Image(Image1, 60dip, 40dip, False).Append(" 4.jpg").Append(CRLF)
cs.PopAll
Label1.Text = cs
Label1显示:
四、创建可点击文本
使用CSBuilder的Clickable 方法可以创建可点击的文本。要引发该事件,您必须调用 cs.EnableClickEvents方法。
Clickable语法:
Clickable (EventName As String , Tag As Object)
EventName:点击可点击文本后要执行的程序名称。
Tag:对象标记,以区分您点击了哪个可点击文本。
EnableClickEvents语法:
EnableClickEvents (Label As android.widget.TextView)
Label:文本标签视图,指定展示可点击文本并引发Click事件的Label。
Dim cs As CSBuilder
cs.Initialize.Size(20).Append("点击下划线文本: ")
cs.Clickable("cs", 1).Underline.Append("弹窗显示").Pop.Pop
cs.Append(", ").Clickable("cs", 2)
cs.Underline.Append("ToastMessageShow显示").PopAll
cs.EnableClickEvents(Label1)
Label1.Text = cs
' 点击事件例程
Sub cs_Click (Tag As Object)
Select Tag
Case 1
xui.MsgboxAsync("您点击的文本是:弹窗显示","提示")
Case 2
ToastMessageShow("您点击的是:ToastMessageShow显示",True)
End Select
End Sub
五、突出显示文本
突出显示文本其实就是将文本需要突出显示的部分设置高亮度颜色,以明显区别于其它文本。可以使用CSBuilder的Color方法。
例如:
Dim cs As CSBuilder
cs.Initialize.Size(20).Append("我要高亮显示:")
cs.Color(Colors.Cyan).Append("我的学历").PopAll
Label1.Text = cs
Label1显示:我要高亮显示:我的学历
六、CSBuilder方法
(一) B4A / B4i
1、Alignement (Alignment As Alignment Enum)
启动文本对齐样式域。
Alignment :以下字符串之一:
ALIGN_NORMAL、ALIGN_OPPOSITE、ALIGN_CENTER
2、 Append (Text As CharSequence)
添加提供的字符串或字符序列.
3、BackgroundColor (Color As Int)
启动背景颜色样式域。
4、Color (Color As Int)
启动前景颜色样式域。
5、Initialize
初始化生成器。您可以多次调用此方法来创建新的字符序列。
请注意,与大多数其他方法一样,它也会返回当前对象。
6、IsInitialized
测试对象是否已被初始化。返回一个布尔值。
7、Pop
关闭最后的样式域。 必须要关闭所有的样式域。您可以调用PopAll来关闭所有打开的样式域。
8、PopAll
关闭所有打开的样式域。
总是在末尾调用PopAll是很方便的,以确保所有的样式域全部关闭。
9、Strikethrough
启动删除线样式域
10、ToString
返回带有指定字符的字符串。
11、Underline
启动下划线样式域。
12、VerticalAlign (Shift As Int)
启动垂直对齐样式域(正数 = 向下)。
(二) 仅B4A
1、Image (Bitmap As Bitmap, Width As Int, Height As Int, Baseline As Boolean)
添加图像样式域。 此方法将为图像添加一个空格字符作为占位符。 与其他方法不同,您不需要调用Pop来关闭这个域,因为它是自动关闭的。
2、RelativeSize (Proportion As Float)
启动相对尺寸样式域。实际的文本大小将与设置的比例Proportion相乘。
3、ScaleX (Proportion As Float)
启动水平方向比例尺为样式域。它可以水平地按指定比例Proportion缩放文本。
4、Size (Size As Int)
启动文本大小样式域。注意,文本大小不应使用dip单位
5、TypeFace (Typeface As Typeface)
启动自定义字体样式域。类似于B4i的字体。
(三) 仅B4i
1、Font (Font As B4IFontWrapper)
启动字体样式域。
注意,当调用自动缩放时,字体将被重置。您应该在父级Resize事件中更改字体,或者从布局设计器脚本中删除所有对自动缩放的调用。
类似于B4A的自定义字体。
2、KerningScale (Scale As Float)
设置字间距(水平间距)比例。
3、Link (URL As NSString)
创建链接。链接可以在不可编辑的文本视图中点击。
标签:样式,Label1,生成器,B4X,Pop,CSBuilder,cs,文本,Append From: https://blog.csdn.net/yshzsl1968/article/details/144505004