04 - ark组件UI

Image组件的创建

截屏2024-05-08 14.36.24.png

网络权限配置

截屏2024-05-08 14.57.01.png

Text组件的创建

截屏2024-05-08 15.21.10.png

TextInput组件的创建

截屏2024-05-08 16.03.46.png
Image($r('app.media.test'))
          .width(this.imageWidth)

        Text($r('app.string.inputWidth'))
          .fontSize(30)
          .fontColor('#000')
          .fontWeight(FontWeight.Medium)

        TextInput({
          text: this.imageWidth.toFixed(0) //数据类型转字符串, 保留0位小数
        }).width(300)
          .type(InputType.Number)
          .onChange(value => {
            this.imageWidth = parseInt(value)
          })

Button组件的创建

截屏2024-05-08 16.20.57.png
        Image($r('app.media.test'))
          .width(this.imageWidth)

        Text($r('app.string.inputWidth'))
          .fontSize(30)
          .fontColor('#000')
          .fontWeight(FontWeight.Medium)

        TextInput({
          text: this.imageWidth.toFixed(0) //数据类型转字符串, 保留0位小数
        }).width(300)
          .type(InputType.Number)
          .onChange(value => {
            this.imageWidth = parseInt(value)
          })

        Button("放大")
          .width(100)
          .height(50)
          .fontSize(30)
          .onClick(()=>{
            if (this.imageWidth <= 300) {
              this.imageWidth += 10
            }
          })

        Button("缩小")
          .width(100)
          .height(50)
          .fontSize(30)
          .onClick(()=>{
            if (this.imageWidth > 10) {
              this.imageWidth -= 10
            }
          })

Silder组件的创建

截屏2024-05-08 16.29.11.png
 Image($r('app.media.test'))
          .width(this.imageWidth)

        Text($r('app.string.inputWidth'))
          .fontSize(30)
          .fontColor('#000')
          .fontWeight(FontWeight.Medium)

        TextInput({
          text: this.imageWidth.toFixed(0) //数据类型转字符串, 保留0位小数
        }).width(300)
          .type(InputType.Number)
          .onChange(value => {
            this.imageWidth = parseInt(value)
          })

        Button("放大")
          .width(100)
          .height(50)
          .fontSize(30)
          .onClick(()=>{
            if (this.imageWidth <= 300) {
              this.imageWidth += 10
            }
          })

        Button("缩小")
          .width(100)
          .height(50)
          .fontSize(30)
          .onClick(()=>{
            if (this.imageWidth > 10) {
              this.imageWidth -= 10
            }
          })

        Slider({
          min: 10,
          max: 300
        })
          .width('90%')
          .blockColor('#36D')
          .trackThickness(8)
          .showTips(true)
          .onChange(value => {
            this.imageWidth = value
          })

Progress组件的创建 (圆环组件)

截屏2024-05-11 15.50.23.png
Progress({
            value: 10,
            total: 30,
            type: ProgressType.Ring, //圆环的类型
          })

Checkbox组件的创建 (多选框组件)

截屏2024-05-11 16.14.23.png
Checkbox()
     .select(false)
     .onChange((value)=> {
                     
      })

布局组件的创建

截屏2024-05-08 16.40.53.png
截屏2024-05-08 16.42.38.png

Column容器

截屏2024-05-08 16.44.22.png

Column容器主轴方向对齐方式

截屏2024-05-08 16.50.37.png

Column容器交叉轴方向对齐方式

截屏2024-05-08 16.53.12.png

Row容器

Row容器主轴方向对齐方式

截屏2024-05-08 16.51.57.png

Row容器交叉轴方向对齐方式, 下图有误, 应该是VerticalAlign.Top, VerticalAlign.Bottom

截屏2024-05-08 16.54.09.png

Row容器和Column容器小结

截屏2024-05-08 17.19.44.png

主轴justifyContent 设置值都是 FlexAlign枚举
Row组件 交叉轴 alignItems 设置值是 VerticalAlign 枚举, 例如 VerticalAlign.Top, VerticalAlign.Bottom
Column组件alignItems设置值是HorizontailAlign枚举, 例如 HorizontailAlign.Start

循环控制

截屏2024-05-08 17.25.48.png
ForEach(this.itmts, (item, index)=>{
        Row({space: 10}){
          Image($r('app.media.test'))
            .width(50)

          Column({space: 10}){

            Text(item.name)
              .fontSize(20)
              .fontColor('#36D')

            Text('¥' + item.price)

          }.alignItems(HorizontalAlign.Start)

        }.justifyContent(FlexAlign.Start)
        .width('90%')
        .backgroundColor('#DDD')
        .height(100)
        .padding({left: 10, top: 10})
        .alignItems(VerticalAlign.Top)
      })

Stack容器, 当组件需要叠加显示时用Stack

截屏2024-05-11 15.53.05.png
//stack 容器, 将容器入栈, 相互叠加的组件用stack 容器
        Stack(){
          //Progress 圆环组件
          Progress({
            value: 10,
            total: 30,
            type: ProgressType.Ring,
          })

          Row(){
            Text(`10`)
              .fontColor('#36D')
              .fontSize(20)

            Text(`/ 30`)
              .fontColor('#000')
              .fontSize(20)
          }
        }

List组件 (支持滚动, 纵向和横向排列)

截屏2024-05-11 10.32.35.png

使用list实现上面功能

.layoutWeight(1) 权重属性,可以用来动态设置高度, 此处表示List组件的高度是除了标题以外的所有高度

使用List组件, 可以设置alignListItem属性, 让list里面的行元素水平方向居中

给ListItem组件设置swipeAction属性, 可以设置左滑删除效果

        ListItem(){
          Row({space: 10}){
            Image($r('app.media.test'))
              .width(50)

            Column({space: 10}){

              Text(item.name)
                .fontSize(20)
                .fontColor('#36D')

              Text('¥' + item.price)

            }.alignItems(HorizontalAlign.Start)
        
          }.justifyContent(FlexAlign.Start)
          .width('90%')
          .backgroundColor('#DDD')
          .height(100)
          .padding({left: 10, top: 10})
          .alignItems(VerticalAlign.Top)

        }swipeAction({end: this.DeleteButton(index)})
      })
    }.width('100%')
      .padding({left: 20})
      .alignListItem(ListItemAlign.Center) //让list里面的组件水平方向居中
      .layoutWeight(1) // 权重属性,可以用来动态设置高度, 此处表示List组件的高度是除了标题以外的所有高度
@Builder DeleteButton(index: number) {
      Button(){
        Image($r('app.media.deleteWhite'))
          .fillColor(Color.White)
          .width(20)
      }.width(40)
      .height(40)
      .margin(5)
      .type(ButtonType.Capsule)
      .onClick((e)=> {
        this.tasks.splice(index, 1)
        this.totalTask = this.tasks.length
        this.finishTask = this.tasks.filter(item => item.finish).length
      })
  }

自定义组件

截屏2024-05-11 10.56.51.png

全局函数, 写在组件外面

截屏2024-05-11 11.37.59.png

全局函数, 调用方式

createItem(item)

组件内的局部函数, 写在组件内部

截屏2024-05-11 11.46.17.png

局部函数, 调用方式

 this.createItem(item)

全局样式函数

截屏2024-05-11 11.49.43.png

全局样式函数调用


List({space: 10}) {

      ForEach(this.itmts, item => {

        ListItem(){
          this.createItem(item)
        }
      })
    }.commomStyle()

局部样式函数

截屏2024-05-11 13.59.59.png

调用方式同全局样式函数一致

如果封装的样式属性是某个组件特有的属性, 不是通用属性, 则需要用到继承

  1. 封装全局Text样式函数, @Extend只能写在全局模式
截屏2024-05-11 14.07.09.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容