【Harmony3.1/4.0】笔记二

news2024/11/15 23:46:17

概述

列表是一种复杂的容器,当列表项达到一定数量,内容超过屏幕大小时,可以自动提供滚动功能。它适合用于呈现同类数据类型或数据类型集,例如图片和文本。在列表中显示数据集合是许多应用程序中的常见要求(如通讯录、音乐列表、购物清单等)。

使用列表可以轻松高效地显示结构化、可滚动的信息。通过在List组件中按垂直或者水平方向线性排列子组件ListItemGroup或ListItem,为列表中的行或列提供单个视图,或使用ForEach迭代一组行或列,或混合任意数量的单个视图和ForEach结构,构建一个列表。List组件支持使用条件渲染、循环渲染、懒加载等渲染控制方式生成子组件。

列表的综合学习

代码如下


import util from '@ohos.util'
//创建实体类联系人
class Contact{
    key:string=util.generateRandomUUID(true); //随机生成UUID
    name:string;
    icon:Resource;
    icon1:Resource=$r("app.media.img21");

  //定义构造方法
  constructor(name:string,icon:Resource) {
    this.name=name;
    this.icon=icon;
  }
}

@Entry
@Component
struct Two{
  private  icons:Resource[]=[$r("app.media.img1"),$r("app.media.img2"),$r("app.media.img3"),$r("app.media.img4"),
  $r("app.media.img5"),$r("app.media.img6"),$r("app.media.img7"),$r("app.media.img8"),
  $r("app.media.img9"),$r("app.media.img10"),$r("app.media.img11"),$r("app.media.img12"),
  $r("app.media.img13"),$r("app.media.img14"),$r("app.media.img15"),$r("app.media.img16"),
  $r("app.media.img17"),$r("app.media.img18"),$r("app.media.img19"),$r("app.media.img20")]
  private names:string[]=["马云","任正非","李彦宏","张磊","刘强东",
    "奶茶妹","马化腾","鸿祎","余大炮","马斯克",
    "奥巴马","李斌","雷军","成龙","刘德华",
    "巴菲特","张磊","汪涵","大张伟","李连杰"]
  @State contacts:Contact[]=[
    new Contact(this.names[0],this.icons[0]),new Contact(this.names[1],this.icons[1]),
    new Contact(this.names[2],this.icons[2]),new Contact(this.names[3],this.icons[3]),
    new Contact(this.names[4],this.icons[4]),new Contact(this.names[5],this.icons[5]),
    new Contact(this.names[6],this.icons[6]),new Contact(this.names[7],this.icons[7]),
    new Contact(this.names[8],this.icons[8]),new Contact(this.names[9],this.icons[9]),
    new Contact(this.names[10],this.icons[10]),new Contact(this.names[11],this.icons[11]),
    new Contact(this.names[12],this.icons[12]),new Contact(this.names[13],this.icons[13]),
    new Contact(this.names[14],this.icons[14]),new Contact(this.names[15],this.icons[15]),
    new Contact(this.names[16],this.icons[16]),new Contact(this.names[17],this.icons[17]),
    new Contact(this.names[18],this.icons[18]),new Contact(this.names[19],this.icons[19]),
  ];

  //通过封装实体类的方式,生成创建列表
  build(){
    Column(){
      Text("联系人列表").width("100%").height(60).backgroundColor("#800f")
        .fontSize(25).fontColor(Color.White).fontWeight(FontWeight.Bold)
        .textAlign(TextAlign.Center)
      //列表设置宽度100%,高度根据内容自适应
      List({space:10}){
        ForEach(this.contacts,(item:Contact,index)=>{
          ListItem(){
            Row(){
              Image(item.icon).width(40).height(40).margin(10)
              Text(item.name).fontSize(20).margin({left:20}).layoutWeight(1)
              Image(item.icon1).width(40).height(40).margin(10).backgroundColor("#6aaa").borderRadius(20)
            }.width("100%")
          }
        },item=>item.key)
      }.width("100%").divider({
        strokeWidth:1,
        color:"#aaa",
        startMargin:10,
        endMargin:10
      }).scrollBar(BarState.Auto)
    }.width("100%")
  }
}

二级列表的综合学习

选择联系人,实现左滑显示删除效果

联系人分组联动效果

一键回归顶部效果

代码如下

//二级列表的实现
import util from '@ohos.util'
//创建实体类联系人
class Contact{
  key:string=util.generateRandomUUID(true); //随机生成UUID
  name:string;
  icon:Resource;
  icon1:Resource=$r("app.media.img21");

  //定义构造方法
  constructor(name:string,icon:Resource) {
    this.name=name;
    this.icon=icon;
  }
}

@Entry
@Component
struct Three{

  private  icons:Resource[]=[$r("app.media.img1"),$r("app.media.img2"),$r("app.media.img3"),$r("app.media.img4"),
  $r("app.media.img5"),$r("app.media.img6"),$r("app.media.img7"),$r("app.media.img8"),
  $r("app.media.img9"),$r("app.media.img10"),$r("app.media.img11"),$r("app.media.img12"),
  $r("app.media.img13"),$r("app.media.img14"),$r("app.media.img15"),$r("app.media.img16"),
  $r("app.media.img17"),$r("app.media.img18"),$r("app.media.img19"),$r("app.media.img20")]
  private names:string[]=["马云","任正非","李彦宏","张磊","刘强东",
    "奶茶妹","马化腾","鸿祎","余大炮","马斯克",
    "奥巴马","李斌","雷军","成龙","刘德华",
    "巴菲特","张磊","汪涵","大张伟","李连杰"]
  private groups:object[]=[
    { title:"A",
    contacts:[new Contact(this.names[0],this.icons[0]),new Contact(this.names[1],this.icons[1]),
      new Contact(this.names[2],this.icons[2]),new Contact(this.names[3],this.icons[3]),
      new Contact(this.names[4],this.icons[4]),new Contact(this.names[5],this.icons[5])]},
    { title:"B",
      contacts:[new Contact(this.names[6],this.icons[6]),new Contact(this.names[7],this.icons[7]),
        new Contact(this.names[8],this.icons[8]),new Contact(this.names[9],this.icons[9])]},
    { title:"C",
      contacts:[new Contact(this.names[10],this.icons[10]),new Contact(this.names[11],this.icons[11]),
        new Contact(this.names[12],this.icons[12]),new Contact(this.names[13],this.icons[13]),
        new Contact(this.names[14],this.icons[14]),new Contact(this.names[15],this.icons[15]),
        new Contact(this.names[16],this.icons[16])]},
    { title:"D",
      contacts:[new Contact(this.names[17],this.icons[17]),
        new Contact(this.names[18],this.icons[18]),new Contact(this.names[19],this.icons[19])]},

  ]

  //使用层布局添加滚动定位按钮
  private listScroller: Scroller = new Scroller();

  @Builder itemEnd(index: number) {
    // 侧滑后尾端出现的组件
    Button({ type: ButtonType.Circle }) {
      Image($r('app.media.del'))
        .width(25)
        .height(25)
    }.width(40).height(40).backgroundColor("#8aaa")
    .onClick(() => {
      this.groups.splice(index, 1);
    })
  }

  @Builder itemHead(text: string) {
    // 列表分组的头部组件,对应联系人分组A、B等位置的组件
    Text(text)
      .fontSize(20)
      .backgroundColor('#fff1f3f5')
      .width('100%')
      .padding(5)
  }
  build(){
    Stack({alignContent:Alignment.BottomEnd}){
      Column(){
        Text("联系人列表").width("100%").height(60).backgroundColor("#800f")
          .fontSize(25).fontColor(Color.White).fontWeight(FontWeight.Bold)
          .textAlign(TextAlign.Center)
        //列表设置宽度100%,高度根据内容自适应
        List({space:10,scroller:this.listScroller}){
          ForEach(this.groups,item=>{
            ListItemGroup({header:this.itemHead(item.title)}){
              ForEach(item.contacts,(contact,index)=>{
                ListItem(){
                  Row(){
                    Badge({
                      count: Math.round(Math.random()*10),
                      position: BadgePosition.RightTop,
                      style: { badgeSize: 16, badgeColor: '#FA2A2D' }
                    })
                    {Image(contact.icon).width(40).height(40)}.margin({left:10})
                    Text(contact.name).fontSize(20).margin({left:20}).layoutWeight(1)
                    Image(contact.icon1).width(40).height(40).margin(10).backgroundColor("#6aaa").borderRadius(20)
                  }.width("100%")
                }
                .swipeAction({ end: this.itemEnd(index) }) // 设置侧滑属性

              })
            }
          })
        }.width("100%")
        .sticky(StickyStyle.Header)// 设置吸顶,实现粘性标题效果


      }.width("100%")

      //创建按钮,回到顶部
      Button(){
          Image($r("app.media.top")).width(40).height(40)
      }.width(70).height(70).zIndex(1)
      .margin({bottom:30,right:30}).backgroundColor("#6aaa")
      .onClick(()=>{
        // 点击按钮时,指定跳转位置,返回列表顶部
        this.listScroller.scrollToIndex(0)
      })


    }.width("100%").height("100%")

  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1612477.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习500问——Chapter08:目标检测(2)

文章目录 8.2.4 R-FCN 8.2.5 FPN 8.2.6 Mask R-CNN 8.2.4 R-FCN R-FCN 有哪些创新点 R-FCN仍然属于two-stage目标检测算法:RPN R-FCN Fully convolutional位置敏感得分图(position-sentive score maps) our region-based detector is ful…

java-Spring-入门学习-第二天(单例模式和多例模式)

目录 Bean作用域 单例模式(默认可以不写) Spring下的 AutoWired 依赖注入 JaveEE下的 Resource 依赖注入 多例模式 Bean作用域 ​在Spring框架中,Bean是按照作用域来创建的,常见的作用域有两种:Singleton 和 Prototype。Singleton (单例…

6.SpringBoot 日志文件

文章目录 1.日志概述2.日志作用3.使用和观察日志3.1如何观察日志3.2使用日志3.3日志级别3.4日志持久化3.5日志分割 4.日志框架4.1门面模式(外观模式)4.2 SLF4J框架介绍4.3 日志格式的说明4.3.1日志名称 5.日志颜色设置6.总结 大家好,我是晓星航。今天为大家带来的是…

【Java】HashMap、HashTable和ConcurrentHashMap的区别

文章目录 区别一、HashMap1.1基本定义与特性1.2工作原理与实现1.3常用方法1.4性能与优化 二、HashTable三、ConcurrentHashMap3.1基本特点3.2实现原理3.3常用方法3.4适用场景3.5性能优化 HashTable、HashMap和ConcurrentHashMap之间的区别主要体现在线程安全、继承关系与实现接…

(2024|ICLR,变分扩散模型(VDM),可学习编码器,时间相关的均值函数)DiffEnc:使用学到的编码器进行变分扩散

DiffEnc: Variational Diffusion with a Learned Encoder 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 2. 变分扩散模型的基础 3. DiffEnc 4. 编码器和生成模型的参数化 …

Linux--地址空间

目录 看一个现象 基本概念 细节问题--理解它 1.如何理解地址空间? 2.为什么要有地址空间? 3. 进一步了解页表和写时拷贝 4.如何理解虚拟地址? 看一个现象 先通过一段代码,看一看现象 int g_val 100;int main() {printf(&quo…

Linux 认识与学习Bash——2

1 read 从键盘读取变量的值 read 后面不带变量,那么默认会给REPLY变量赋值 #!/bin/bash echo -n "请输入你的名字:" read name echo "欢迎您 $name" echo "----------------"echo -n "请输入你的名字2:&q…

我与深拷贝

前言 最近在掘金读到了一篇文章《Radash 能取代 Lodash???真幽默 - 掘金》,文章的评论区讨论起了深拷贝。"深拷贝" 我的"老朋友",还记得在学习我人生中的第二道面试题的时候认识了它,…

CSS 画一个三角形

一、前言 在前端开发的时候,我们有时候会需要用到一个三角形的形状,比如地址选择或者播放器里面播放按钮 通常情况下,我们会使用图片或者svg去完成三角形效果图,但如果单纯使用css如何完成一个三角形呢? 实现过程似…

物理学视角讲解diffusion生成模型——隐扩散模型

https://zhuanlan.zhihu.com/p/692996885 https://zhuanlan.zhihu.com/p/693255617 前面两篇文章介绍了扩散过程,同时实现了1维、2维混合高斯扩散、逆扩散,通过模型预测得分函数来实现逆扩散推理。这个章节介绍工业界使用的文本生成图扩撒模型&#xff1…

基于SSM+Jsp+Mysql的多人命题系统

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…

frp改造Windows笔记本实现家庭版免费内网穿透

文章目录 前言frp原理Windows服务端IP检验IP固定软件下载端口放行端口映射开机启动 NAS客户端端口查询软件下载端口检验穿透测试自启设置 Ubuntu客户端软件下载后台启动 后记 前言 之前一直用花生壳远程控制一个服务器,但最近内网的网络策略似乎发生了变化&#xf…

InfiniGate自研网关实现思路二

5.HTTP请求参数解析 解析 HTTP 网络请求的参数信息,包括;GET/POST,以及应对不同 Content-Type 类型的处理。 HTTP 接口请求的参数需要解析成可以匹配到 RPC 接口的入参信息,所以通常为了方便控制一般只支持 RPC 接口单个对象入参…

「sentinel」流量控制组件的应用

「sentinel」流量控制组件的应用 Sentinel版本QPS 一、初识Sentinel1、Sentinel2、Sentinel 和 Hystrix对比3、雪崩问题 二、环境搭建1、下载安装Sentinel2、微服务整合Sentinel 三、流量控制1、簇点链路2、流控设置3、流控模式直接关联链路 4、流控效果流控效果解释 四、热点限…

C#通用类库封装实战

数据库查询 特性方式获取数据库列的别名 数据库更新 使用简单工厂配置的方式

C++ stl容器stack,queue,priority_queue的底层模拟实现

目录 前言: 文档借鉴:Reference - C Reference 1.deque a.deque的结构特点: b.deque的迭代器结构: c.面试题: 2.stack 3.queue 4.仿函数 5.priority_queue 总结: 前言: 本篇一共简单…

【QT学习】8.qt事件处理机制,事件过滤器,自定义事件

1.qt事件处理机制 事件处理: 当用户移动鼠标的时候 ,创建一个 鼠标移动事件对象 然后把这个对象放到 事件队列里面去,事件管理器 从队列中 取出事件,然后 调用其对应的事件处理函数。 多态机制: &#x…

靠谱的婚恋平台有哪些?青藤之恋、二狗、百合网、珍爱网等深度测评

哇塞,恋爱和结婚对于年轻人来讲可是超级重要的大事呢!不过呀,找到一个稳稳当当的婚恋平台可不简单哟!那么,到底哪个婚恋平台最靠得住呢? 丛丛: 这可是我用了好久好久的脱单交友小程序嘞&#xf…

MySQL中explain的用法

执行结果各字段的含义 EXPLAIN SQL语句 如: EXPLAIN SELECT * FROM test 执行结果: 列名描述id在一个大的查询语句中每个SELECT关键字都对应一个 唯一的idselect_typeSELECT关键字对应的那个查询的类型table表名partitions匹配的分区信息type针对单表…

机器学习预测汽车油耗效率 MPG

流程 数据获取导入需要的包引入文件,查看内容划分训练集和测试集调用模型查看准确率 数据获取 链接:https://pan.baidu.com/s/1KeIJykbcVpsfEk0xjhiICA?pwd30oe 提取码:30oe --来自百度网盘超级会员V1的分享导入需要的包 import pandas as pd imp…