【ARK UI】HarmonyOS 如何实现新闻列表

参考资料

初识Component

构建食物列表List布局

List

ListItem

 

代码实现

1、准备数据

构造数据源,新闻列表包含“新闻的id”、“新闻图片”、“新闻标题”、“新闻的内容”四个内容,字段表示如下

新闻的id:id

新闻图片:ImageUrl

新闻标题:Title

新闻内容:Content

构造数据集合如下

  private arr: any[] = [
    {
      ImageUrl:$r('app.media.icon'),
      Title:"认识HarmonyOS",
      Content:"了解HarmonyOS的系统定位、架构、技术特性等。",
      id:"0"
    },
    {
      ImageUrl:$r('app.media.icon'),
      Title:"准备开发环境",
      Content:"安装开发工具,并配置相关开发环境",
      id:"1"
    },
    {
      ImageUrl:$r('app.media.icon'),
      Title:"开发Ability",
      Content:"Ability是HarmonyOS应用程序的重要组成部分",
      id:"2"
    },
    {
      ImageUrl:$r('app.media.icon'),
      Title:"开发UI",
      Content:"FA需要提供UI用于与用户进行交互",
      id:"3"
    },
    {
      ImageUrl:$r('app.media.icon'),
      Title:"开发业务功能",
      Content:"媒体:视频、音频、图像、相机等功能的开发",
      id:"4"
    },
    {
      ImageUrl:$r('app.media.icon'),
      Title:"调试应用",
      Content:"如果需要在真机设备上调试应用",
      id:"5"
    },
  ]
2、自定义新闻条目ListItem布局

我们可以参考初识Component构建食物列表List布局来定义新闻每一条重复数据的样式,我们对新闻条目的样式进行排版,代码如下

@Component
struct NewsItem {
  private ImageUrl:Resource //todo 新闻的图片
  private Title:string //todo 新闻的标题
  private Content:string //todo 新闻的内容
  private id:string  //todo 新闻的id
  build() {
    Row(){//todo 横向布局
      Image(this.ImageUrl).width(100).height(100) //todo 新闻的图片
      Column(){
        Text(this.Title).width("100%").fontSize(25) //todo 新闻的标题
        //todo 新闻的内容
        Text(this.Content).width("100%").fontSize(20).
        margin({top:10}).textOverflow({ overflow: TextOverflow.Ellipsis })
        .maxLines(1)
      }
      .padding({left:25,top:15}).alignItems(HorizontalAlign.Start)
      .height(100).layoutWeight(1)
    }.backgroundColor(Color.White).width("100%")
    .padding({left:10,right:10,bottom:10,top:10})
  }
}

3、实现List列表

我们可以参考ListListItem,来进行绘画list列表,需要注意的问题我们如何使用自定义新闻条目ListItem布局,我们可以参如下代码

NewsItem({
  ImageUrl:item.ImageUrl,
  Title:item.Title,
  Content:item.Content,
  id:item.id
})

新闻列表功能实现,代码如下

build() {
    Stack({ alignContent: Alignment.TopStart }) {
      Column() {
        List({ space: 20, initialIndex: 0 }) {
          ForEach(this.arr, (item) => {
            ListItem() {
              NewsItem({
                ImageUrl:item.ImageUrl,
                Title:item.Title,
                Content:item.Content,
                id:item.id
              })
            }
          },  item => item.toString())
        }
        .listDirection(Axis.Vertical) // 排列方向
        .divider({ strokeWidth: 2, color: 0xFFFFFF, startMargin: 20, endMargin: 20 }) // 每行之间的分界线
      }.width('100%')
    }.width('100%').height('100%').backgroundColor(0xDCDCDC).padding({ top: 5 })
  }

 4、全部代码

@Component
struct NewsItem {
  private ImageUrl:Resource //todo 新闻的图片
  private Title:string //todo 新闻的标题
  private Content:string //todo 新闻的内容
  private id:string  //todo 新闻的id
  build() {
    Row(){//todo 横向布局
      Image(this.ImageUrl).width(100).height(100) //todo 新闻的图片
      Column(){
        Text(this.Title).width("100%").fontSize(25) //todo 新闻的标题
        //todo 新闻的内容
        Text(this.Content).width("100%").fontSize(20).
        margin({top:10}).textOverflow({ overflow: TextOverflow.Ellipsis })
        .maxLines(1)
      }
      .padding({left:25,top:15}).alignItems(HorizontalAlign.Start)
      .height(100)
    }.backgroundColor(Color.White).width("100%")
    .padding({left:10,right:10,bottom:10,top:10})
  }
}


@Entry
@Component
struct ListExample {
  private arr: any[] = [
    {
      ImageUrl:$r('app.media.icon'),
      Title:"认识HarmonyOS",
      Content:"了解HarmonyOS的系统定位、架构、技术特性等。",
      id:"0"
    },
    {
      ImageUrl:$r('app.media.icon'),
      Title:"准备开发环境",
      Content:"安装开发工具,并配置相关开发环境",
      id:"1"
    },
    {
      ImageUrl:$r('app.media.icon'),
      Title:"开发Ability",
      Content:"Ability是HarmonyOS应用程序的重要组成部分",
      id:"2"
    },
    {
      ImageUrl:$r('app.media.icon'),
      Title:"开发UI",
      Content:"FA需要提供UI用于与用户进行交互",
      id:"3"
    },
    {
      ImageUrl:$r('app.media.icon'),
      Title:"开发业务功能",
      Content:"媒体:视频、音频、图像、相机等功能的开发",
      id:"4"
    },
    {
      ImageUrl:$r('app.media.icon'),
      Title:"调试应用",
      Content:"如果需要在真机设备上调试应用",
      id:"5"
    },
  ]
  build() {
    Stack({ alignContent: Alignment.TopStart }) {
      Column() {
        List({ space: 20, initialIndex: 0 }) {
          ForEach(this.arr, (item) => {
            ListItem() {
              NewsItem({
                ImageUrl:item.ImageUrl,
                Title:item.Title,
                Content:item.Content,
                id:item.id
              })
            }
          },  item => item.id)
        }
        .listDirection(Axis.Vertical) // 排列方向
        .divider({ strokeWidth: 2, color: 0xFFFFFF, startMargin: 20, endMargin: 20 }) // 每行之间的分界线
      }.width('100%')
    }.width('100%').height('100%').backgroundColor(0xDCDCDC).padding({ top: 5 })
  }
}

运行效果

111111111111.gif

欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh

posted @ 2022-08-11 20:14  华为开发者论坛  阅读(76)  评论(0编辑  收藏  举报