Openharmony开发与入门----界面渲染 原创

Crips
发布于 2023-8-1 13:18
浏览
1收藏

·循环渲染(Foreach渲染)

①接口描述:

ForEach(
arr: any[],
itemGenerator: (item: any, index?: number) => void,
keyGenerator?: (item: any, index?: number) => string
)

②实例展示

代码:
@Entry
@Component
struct MyComponent {
@State arr: number[] = [10, 20, 30];

build() {
Column({ space: 5 }) {
ForEach(this.arr, (item: number) => {
Text(item value: ${item}).fontSize(18)
Divider().strokeWidth(2)
}, (item: number) => item.toString())
}
}
}
运行结果:
Openharmony开发与入门----界面渲染-鸿蒙开发者社区

③水果排行榜代码优化:

@Entry
@Component
struct Index {
//类结构体
fruitsData:Array<Object>=[
{
‘id’:‘1’,
‘name’:‘苹果’,
‘vote’:‘12080’
},
{
‘id’:‘2’,
‘name’:‘葡萄’,
‘vote’:‘11090’
},
{
‘id’:‘3’,
‘name’:‘西瓜’,
‘vote’:‘9801’
}
]

build() {
Column(){
//标题栏
Row(){
//左侧布局
Row(){
Image($r(‘app.media.1’))
.width(22)
.height(22)
//给图片和文字设定外边距
.margin({right:18})
Text(‘排行榜’)
.fontSize(20)
}
.width(‘50%’)
.height(‘100%’)
.justifyContent(FlexAlign.Start)
//右侧布局
Row(){
Image($r(‘app.media.2’))
.width(22)
.height(22)
}
.width(‘50%’)
.height(‘100%’)
.justifyContent(FlexAlign.End)
}
.width(‘100%’)
.height(47)

  //排行榜表头
  Row(){
    Row(){
      Text('排名')
        .fontSize(14)
        .fontColor('#989a9c')
    }
    .width('30%')
    Row(){
      Text('种类')
        .fontSize(14)
        .fontColor('#989a9c')
    }
    .width('50%')
    Row(){
      Text('得票数')
        .fontSize(14)
        .fontColor('#989a9c')
    }
    .width('20%')

  }
  .width('90%')
  .padding(15)
  //排行榜列表项
  Column(){
     List(){
    //   //苹果,ListItem用来描述每一行
    //   ListItem(){
    //     Row(){
    //       Text('1').fontSize(16).fontColor(Color.White).fontWeight(FontWeight.Bold).width('30%')
    //         .backgroundColor(Color.Blue)
    //         .borderRadius(15).width(30).height(30)
    //         .textAlign(TextAlign.Center).margin({right:55})
    //       Text('苹果').fontSize(16).fontWeight(FontWeight.Bold).width('40%')
    //       Text('12080').fontSize(16).fontWeight(FontWeight.Bold).width('30%')
    //     }
    //   }.width('100%').height(47)
    //   //葡萄
    //   ListItem(){
    //     Row(){
    //       Text('2').fontSize(16).fontColor(Color.White).fontWeight(FontWeight.Bold).width('30%')
    //         .backgroundColor(Color.Blue)
    //         .borderRadius(15).width(30).height(30)
    //         .textAlign(TextAlign.Center).margin({right:55})
    //       Text('葡萄').fontSize(16).fontWeight(FontWeight.Bold).width('40%')
    //       Text('10320').fontSize(16).fontWeight(FontWeight.Bold).width('30%')
    //     }
    //   }.width('100%').height(47)
    //   //西瓜
    //   ListItem(){
    //     Row(){
    //       Text('3').fontSize(16).fontColor(Color.White).fontWeight(FontWeight.Bold).width('10%')
    //         .backgroundColor(Color.Blue)
    //         .borderRadius(15).width(30).height(30)
    //         .textAlign(TextAlign.Center).margin({right:55})
    //       Text('西瓜').fontSize(16).fontWeight(FontWeight.Bold).width('40%')
    //       Text('9801').fontSize(16).fontWeight(FontWeight.Bold).width('30%')
    //     }
    //   }.width('100%').height(47)
       ForEach(this.fruitsData,(item)=>{
           ListItem(){
             Row(){
               Text(item.id).fontSize(16).fontColor(Color.White).fontWeight(FontWeight.Bold).width('30%')
                 .backgroundColor(Color.Blue)
                 .borderRadius(15).width(30).height(30)
                 .textAlign(TextAlign.Center).margin({right:55})
               Text(item.name).fontSize(16).fontWeight(FontWeight.Bold).width('40%')
               Text(item.vote).fontSize(16).fontWeight(FontWeight.Bold).width('30%')
             }
           }.width('100%').height(47)
       })
     }
  }.width('90%')
  .padding(15)
  .backgroundColor(Color.White)
  .borderRadius(18)
}
.height('100%')
.width('100%')
//设置内边距
.padding({right:26,left:26})
//设置外边距
.margin({top:10})
.backgroundColor('#f1f3f5')
}

}

·条件渲染

①使用规则:

支持if、else和else if语句。
if、else if后跟随的条件语句可以使用状态变量。
允许在容器组件内使用,通过条件渲染语句构建不同的子组件。

②实例展示(水果排行榜的循环渲染+条件渲染)

代码:
@Entry
@Component
struct Index {
//类结构体
fruitsData:Array<Object>=[
{
‘id’:‘1’,
‘name’:‘苹果’,
‘vote’:‘12080’
},
{
‘id’:‘2’,
‘name’:‘葡萄’,
‘vote’:‘11090’
},
{
‘id’:‘3’,
‘name’:‘西瓜’,
‘vote’:‘9801’
},
{
‘id’:‘4’,
‘name’:‘柠檬’,
‘vote’:‘7277’
},
]

build() {
Column(){
//标题栏
Row(){
//左侧布局
Row(){
Image($r(‘app.media.1’))
.width(22)
.height(22)
//给图片和文字设定外边距
.margin({right:18})
Text(‘排行榜’)
.fontSize(20)
}
.width(‘50%’)
.height(‘100%’)
.justifyContent(FlexAlign.Start)
//右侧布局
Row(){
Image($r(‘app.media.2’))
.width(22)
.height(22)
}
.width(‘50%’)
.height(‘100%’)
.justifyContent(FlexAlign.End)
}
.width(‘100%’)
.height(47)

  //排行榜表头
  Row(){
    Row(){
      Text('排名')
        .fontSize(14)
        .fontColor('#989a9c')
    }
    .width('30%')
    Row(){
      Text('种类')
        .fontSize(14)
        .fontColor('#989a9c')
    }
    .width('50%')
    Row(){
      Text('得票数')
        .fontSize(14)
        .fontColor('#989a9c')
    }
    .width('20%')

  }
  .width('90%')
  .padding(15)
  //排行榜列表项
  Column(){
     List(){
       ForEach(this.fruitsData,(item)=>{
           ListItem(){
             Row() {
               if (item.id <= 3) {
                 Column() {
                   Row() {
                     Text(item.id)
                       .fontSize(14)
                       .fontColor(Color.White)
                   }
                   .backgroundColor(Color.Blue)
                   .width(24)
                   .height(24)
                   .borderRadius(24)
                   .justifyContent(FlexAlign.Center)
                 }
                 .width('30%')
                 .alignItems(HorizontalAlign.Start)

               }
               else {
                 Column() {
                   Text(item.id)
                     .fontSize(16)
                     .fontWeight(FontWeight.Bold)                       .width(24)
                     .height(24)
                     .width(24)
                     .textAlign(TextAlign.Center)
                 }
                 .width('30%')
                 .alignItems(HorizontalAlign.Start)
               }
               Text(item.name).fontSize(16).fontWeight(FontWeight.Bold).width('40%')
               Text(item.vote).fontSize(16).fontWeight(FontWeight.Bold).width('30%')
             }
           }.width('100%').height(47)
       })
     }
  }.width('90%')
  .padding(15)
  .backgroundColor(Color.White)
  .borderRadius(18)
}
.height('100%')
.width('100%')
//设置内边距
.padding({right:26,left:26})
//设置外边距
.margin({top:10})
.backgroundColor('#f1f3f5')
}

}
运行结果:
Openharmony开发与入门----界面渲染-鸿蒙开发者社区

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2023-8-4 14:52:32修改
2
收藏 1
回复
举报
2条回复
按时间正序
/
按时间倒序
安苒anran0
安苒anran0

给新人一点关注

回复
2023-8-3 11:14:51
Crips
Crips 回复了 安苒anran0
给新人一点关注

谢谢支持!

回复
2023-8-4 14:53:37
回复
    相关推荐