首页 > 编程语言 >B4X编程语言:B4A, B4i 字符序列生成器CSBuilder

B4X编程语言:B4A, B4i 字符序列生成器CSBuilder

时间:2024-12-16 17:28:03浏览次数:12  
标签:样式 Label1 生成器 B4X Pop CSBuilder cs 文本 Append

        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

相关文章

  • B4X编程语言:B4X智能字符串
            智能字符串是标准字符串的更强大版本。它具有支持多行字符串、无需转义引号、支持字符串插值三个优点。        智能字符串以$"开头,以"$"结尾,返回标准字符串。    示例:        DimsAsString=$"Mynameis"$       ......
  • B4X编程语言:B4X字符串生成器StringBuilder
            SQL查询字符串、B4J控件的Style属性字符串等有时候会很长,不但影响代码结构的可读性,而且易出错、不方便输入和维护。我们通常会拆分为两个或多个字符串变量,输入后再连接合并使用。        B4X为我们提供了一个很好用的字符串操作对象:StringBuilder字符......
  • 使用分部属性和代码生成器完成依赖自动注入
    对于使用IOC管理的服务,通常会对构造函数中的依赖完成自动的依赖注入,但对于属性就需要额外处理了。比如,可以使用Autofac这个成熟的框架。本文是一个利用SourceGenerator和partialproperty特性,完成属性依赖注入的一个案例。如果说相比Autofac等有什么优势的话,就是本文......
  • [VMware] VMware 17.5.0 中文版带序号生成器(中文版)安装详细教程(附下载链接)
     前言VMware17.5.0链接:https://pan.quark.cn/s/d93b53f59b41提取码:YsF7VMWare WorkstationPro是一款虚拟机软件,在其中可以安装各种虚拟操作系统。解压下载的压缩包得到文件,可以看到有一个应用程序和一个序-号生成器双击文件里的应用程序看到如图所示的安装向......
  • SpringBoot项目实战(37)--使用Beetl模板实现代码生成器(六)-- 完整的Mybatis-plus低代码生
        在上文中介绍了Mybatis-plus增删改查的整套代码。本文利用上文的整套代码改造Beetl代码模版,并依据这些模版,选择一个数据库表生成增删改查相关的程序代码。 一、数据库表    因为上文用了comm_api_key作为代码模板,已经有了一套示例代码,本文使用另外的数......
  • JavaUtils - [04] 代码生成器(新)
    题记部分  001|| 引入依赖<!--CodeGenerator--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.9</version></dependency><depend......
  • JavaUtils - [03] 代码生成器
    题记部分 001|| 引入依赖<!--CodeGenerator--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.4.1</version></dependency><dependenc......
  • Google PaliGemma 2 新增情绪识别能力;OpenAI 即将发布全新 Sora 视频生成器丨 RTE 开
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编......
  • 提现生成器【APP】自定义生成小游戏提现截图
    今天发个避坑帖!首先看看下面这种收益图,你们肯定见过不少!‘割割’们让你上车,必须得有一些吸引你的东东啊,不然怎么割你吗?其实这种截图都是软件生成的,我网站上分享过非常多的类似软件,什么聊天记录生成的啊,什么ZFB,微信零钱转账记录,余额多少啊。。。。。都可以生成。像这种......
  • 提现生成器【APP】自定义生成小游戏提现截图
    今天发个避坑帖!首先看看下面这种收益图,你们肯定见过不少!‘割割’们让你上车,必须得有一些吸引你的东东啊,不然怎么割你吗?其实这种截图都是软件生成的,我网站上分享过非常多的类似软件,什么聊天记录生成的啊,什么ZFB,微信零钱转账记录,余额多少啊。。。。。都可以生成。像这种......