0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙ArkTS+ArkUI仿微信通讯录页面制作【2】

张越 来源:jf_51656278 作者:jf_51656278 2025-07-01 11:45 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

继续先放一下效果图

然后继续上一篇文章的内容,上一次我们讲到如何去获取每个人名字的第一个字,接下来讲一下如何设置每个名字之前的那个圆的背景色
先放一下代码:

getAvatarColor(name:string):string{
    const colors = [
      '#FF9AA2', '#FFB7B2', '#FFDAC1', '#E2F0CB', '#B5EAD7',
      '#C7CEEA', '#A8E6CF', '#FFD3A5', '#FD9644', '#9BB5FF',
      '#98D8C8', '#F7DC6F', '#BB8FCE', '#85C1E9', '#F8C471'
    ];
    const index = name.charCodeAt(0) % colors.length;
    return colors[index];
  }

name.charCodeAt(0) 方法用于获取 name 字符串的第一个字符的 Unicode 编码。例如,如果 name 是 "Apple",那么 name.charCodeAt(0) 将返回字符 'A' 的 Unicode 编码(65)。
colors.length 表示 colors 数组的长度,这里是 15。
% 是取模运算符,用于计算 name.charCodeAt(0) 除以 colors.length 的余数。这个余数将作为 colors 数组的索引,确保索引值在 0 到 colors.length - 1 的范围内。例如,如果 name.charCodeAt(0) 是 65,colors.length 是 15,那么 65 % 15 的结果是 5,这意味着 index 的值为 5。所以说,每一个字符都能找到其专属的一个颜色,而不用搞随机数,也能保证视觉效果的一致性。

然后要先设置基本的UI,通过List + ListItemGroup + ListItem来实现,一般项目里我们很少用到ListItemGroup,但是因为这里我们在滚动的时候,是按照首字母为一个组进行滚动的,并且每一组上面都有一个字母作为“标题”,所以使用ListItemGroup更加方便,代码如下:

List({scroller:this.scroller}){
          //联系人列表
          ForEach(this.contactListArr,(val:Contact)= >{
            ListItemGroup({header:this.HeaderGroupItem(val.group)}){
              ForEach(val.namesList,(name:string)= >{
                ListItem(){
                  Row(){
                    //头像
                    Column(){
                      Text(this.getInitial(name))
                        .fontSize(16)
                        .fontWeight(FontWeight.Medium)
                        .fontColor('#ffffff')
                    }.width(45).height(45).backgroundColor(this.getAvatarColor(name)).borderRadius(22.5).justifyContent(FlexAlign.Center).margin({right:16}).shadow({
                      radius:4,color:'#00000015',offsetX:0,offsetY:2
                    })
                    //姓名
                    Text(name)
                      .fontSize(16)
                      .fontColor('#1a1a1a')
                      .layoutWeight(1)
                    //右箭头
                    Text(' >')
                      .fontSize(16)
                      .fontColor('#c7c7cc')
                  }.width('100%').padding({left:20,right:20,top:12,bottom:12}).alignItems(VerticalAlign.Center).backgroundColor('#ffffff').onClick(()= >{
                    console.log(`点击了联系人: ${name}`)
                  })
                }
              })
            }
          })
        }.backgroundColor('#f5f5f5').divider({
          strokeWidth:0.5,color:'#f0f0f0',startMargin:81,endMargin:20
        }).onScrollIndex((start)= >{
          this.currentIndex = start;
        }).layoutWeight(1)

接下来是AlphabetIndexer组件,我们先贴一下代码,然后再详细讲解里面的各个属性

AlphabetIndexer({arrayValue:this.alphabets,selected:this.currentIndex})
          .autoCollapse(false)
          .selectedColor('#007AFF')
          .itemSize(20)
          .popupBackground('#ffffff')
          .usingPopup(true)
          .alignStyle(IndexerAlign.Right)
          .popupFont({size:24,weight:FontWeight.Medium})
          .selectedFont({size:14,weight:FontWeight.Medium})
          .font({size:12})
          .itemBorderRadius(10)
          .popupPosition({x:30,y:0})
          .margin({right:12})
          .popupItemBorderRadius(8)
          .popupSelectedColor('#007AFF')
          .popupUnselectedColor('#8e8e93')
          .onSelect((index)= >{
            this.scroller.scrollToIndex(index)
          })

autoCollpase是是否自适应折叠模式,在api12以后,这个值默认为true,即自适应折叠模式,因为我们现在是26个英文字母,所以按照文档里的说法,是会默认折叠的。
usingPopup代表的是是否默认显示弹窗,也就是比如说你点了右边的A以后,会有一个弹窗来显示你当前点击的是“A”
popupPosition就是代表的这个弹窗的位置,具体位置是相对于索引条上边框中点的位置。但是这里和普通的position有点不太一样……普通的坐标轴是往左往上是负值,这里的是往左和往下是正值
然后是onSelect,也就是选中后,那么让滚动的控制器滚动到对应的ListItemGroup即可,因为26个英文字母都有自己对应的Group
最后,要注意这个List组件和AlphabetIndexer组件需要放在同一个stack组件里,采用堆叠容器

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Unicode
    +关注

    关注

    0

    文章

    25

    浏览量

    12869
  • 鸿蒙
    +关注

    关注

    60

    文章

    2858

    浏览量

    45349
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【HarmonyOS 5】鸿蒙页面和组件生命周期函数

    【HarmonyOS 5】鸿蒙页面和组件生命周期函数 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财# 一、生命周期阶段: 创建阶段 build
    的头像 发表于 07-11 18:24 789次阅读

    鸿蒙ArkTS+ArkUI仿消息列表页制作

    ​ 先放一下页面效果: 第一步我们先定义一下数据格式,创建一个数据模型,通过图片,可以看到每一条数据的字段应当包括:头像,姓名,最新消息内容和最新消息的时间,创建一个model文件夹,然后在里面新建
    发表于 06-30 18:28

    仿登录页面制作

    还涉及到一个TextInput占位符的问题,可以从页面中看到,占位符的颜色明显和旁边的文字颜色不同,那么如果直接设置fontColor的话,设置的是输入的文字的颜色而不是占位符的颜色,对于
    发表于 06-30 18:25

    ArkUI介绍

    ArkUI(方舟UI框架)为应用的UI开发提供了完整的基础设施,包括简洁的UI语法、丰富的UI功能(组件、布局、动画以及交互事件),以及实时界面预览工具等,可以支持开发者进行可视化界面开发
    发表于 06-24 06:41

    ArkUI-X平台桥接Bridge说明

    传递数据,如传递JSON数据、图片等; 2ArkUI侧调用平台的API,如获取Android或iOS平台上的电池电量、复用平台上的三方库等; 3、平台调用ArkUI侧的方法,如复用JavaScript
    发表于 06-19 23:12

    ArkUI-X应用工程结构说明

    ArkUI-X应用中,可保证ArkUI-X应用在各平台上UX渲染一致性。 综上所述,Android平台上通过assets管理ArkTS编译产物、ArkUI应用资源和
    发表于 06-19 23:11

    ArkUI-X跨平台技术落地-华为运动健康(一)

    的设计策略: 1.运动健康首页历史逻辑复杂,涉及的模块多并且改造包袱重,仍使用原生页面native开发技术。 2.在运动健康内部的二级页面(如心脏健康、睡眠等页面)使用
    发表于 06-18 22:53

    ArkUI-X跨平台应用改造指南

    ArkUI-X跨平台应用改造指南 现状与诉求 随着 HarmonyOS Next 5.0 版本正式发布,众多开发者基于 ArkTS 语言为 HarmonyOS Next 系统开发了大量应用,这极大
    发表于 06-16 23:05

    ArkUI-X与Android联动编译开发指南

    ArkTS产物到Android工程中。 其功能主要包括: 1.手动配置编译ArkTS源码开关 2.手动配置编译module 3.手动配置文件输出路径 编译配置说明 配置编译ArkTS
    发表于 06-16 22:55

    鸿蒙5开发宝藏案例分享---Web页面内点击响应时延分析

    鸿蒙Web性能优化宝藏指南!那些官方没明说的实战技巧 各位鸿蒙开发者好!最近在排查Web页面卡顿时,意外在HarmonyOS开发者文档里挖到性能优化的宝藏案例!这些实战经验藏在「应用质量 &
    发表于 06-12 17:09

    ArkUI-X添加到现有Android项目中

    本教程主要讲述如何利用ArkUI-X SDK完成Android AAR开发,实现基于ArkTS的声明式开发范式在android平台显示。包括: 1.跨平台Library工程开发介绍 2.AAR在
    发表于 06-04 22:35

    ArkUI-X添加到现有Android项目中

    本教程主要讲述如何利用ArkUI-X SDK完成Android AAR开发,实现基于ArkTS的声明式开发范式在android平台显示。包括: 1.跨平台Library工程开发介绍 2.AAR在
    发表于 05-28 22:44

    开源啦!!!基于鸿蒙ArkTS封装的图表组件《McCharts》,大家快来一起共创

    Hello;大家好,我是陈杨。好久没更新了,首先是自己本职工作比较忙,基本没时间写作。其次就是学习技术,自学鸿蒙ArkTS语言已经接近半年了,也算半路出师了,这次将分享我封装的组件库,所以有啥讲错
    发表于 03-15 15:21

    Get这个秘籍,鸿蒙原生应用页面滑动丝滑无比

    鸿蒙应用开发中,部分应用页面在滑动时会出现白块或白屏的问题,不仅困扰开发者,还直接影响用户体验。针对这一痛点,华为近期分别推出了针对鸿蒙原生应用ArkUI
    发表于 03-06 14:41

    HarmonyOS NEXT 原生应用开发:社交通讯录界面实现

    一、案例想法 本DEMO展示了如何在HarmonyOS NEXT平台上,使用ArkTS开发语言构建一个简单的社交通讯录界面。用户可以在此界面上浏览联系人列表,每个联系人条目包含姓名、电话号码以及一个
    发表于 01-09 14:37