赞
踩
该标签有的作用有点类似于设计模式中的模板模式,类似于指定一个UI占位符,具体的实现交给具体的@Builder
,顾名思义,可以看出@BuilderParam是以@Builder作为参数来使用的。这么说有点让人莫名其妙,通过例子来具体说明。
如下代码所示,定义一个显示文本文件的@BuilderParam showMessage
方法,具体展示这个message的样式让客户端来定义。
@Component
struct Pattern{
@BuilderParam showMessage:(txt:string) => void;
build() {
Column(){
//直接传参
this.showMessage("Hello HarmonyOS")
}.width('30%')
}
}
我们定义了三个@Builder
方法,分别是showMessageLineThrough
、showMessageUnderline
、showMessageUnderline
,分别展示如下图样式的Text
//横线从中字体中间穿过,字体设置为红色 @Builder showMessageLineThrough(txt:string){ Text() { Span(txt).fontSize(16).fontColor(Color.Red) .decoration({ type: TextDecorationType.LineThrough, color: Color.Red }) } .borderWidth(1) .padding(10) } //下划线,字体为斜体,颜色为蓝色 @Builder showMessageUnderline(txt:string){ Text() { Span(txt).fontColor(Color.Blue).fontSize(16) .fontStyle(FontStyle.Italic) .decoration({ type: TextDecorationType.Underline, color: Color.Black }) } .borderWidth(1) .padding(10) } //上划线,字体为绿色 @Builder showMessageOverline(txt:string){ Text() { Span(txt).fontSize(16).fontColor(Color.Green) .decoration({ type: TextDecorationType.Overline, color: Color.Green }) } .borderWidth(1) .padding(10) } }
前面两部构建了@BuilderParam和对应的@Builder,他们的使用方式如下代码所示:可以看出@BuilderParam是以@Builder作为参数来使用的。
build() {
Row() {
//初始化@BuilderParam showMessage
Pattern({showMessage:this.showMessageLineThrough})
Pattern({showMessage:this.showMessageUnderline})
Pattern({showMessage:this.showMessageOverline})
}.alignItems(VerticalAlign.Center)
.justifyContent(FlexAlign.SpaceAround)
.height('100%')
.width('100%')
}
@Entry @Component struct Index { build() { Row() { Pattern({showMessage:this.showMessageLineThrough}) Pattern({showMessage:this.showMessageUnderline}) Pattern({showMessage:this.showMessageOverline}) }.alignItems(VerticalAlign.Center) .justifyContent(FlexAlign.SpaceAround) .height('100%') .width('100%') } @Builder showMessageLineThrough(txt:string){ Text() { Span(txt).fontSize(16).fontColor(Color.Red) .decoration({ type: TextDecorationType.LineThrough, color: Color.Red }) } .borderWidth(1) .padding(10) } @Builder showMessageUnderline(txt:string){ Text() { Span(txt).fontColor(Color.Blue).fontSize(16) .fontStyle(FontStyle.Italic) .decoration({ type: TextDecorationType.Underline, color: Color.Black }) } .borderWidth(1) .padding(10) } @Builder showMessageOverline(txt:string){ Text() { Span(txt).fontSize(16).fontColor(Color.Green) .decoration({ type: TextDecorationType.Overline, color: Color.Green }) } .borderWidth(1) .padding(10) } } @Component struct Pattern{ @BuilderParam showMessage:(txt:string) => void; build() { Column(){ this.showMessage("Hello HarmonyOS") }.width('30%') } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。