鸿蒙(Harmony) NEXT - AlphabetIndexer实现联系人字母索引

news/2024/11/18 23:21:35/文章来源:https://www.cnblogs.com/yishaochu/p/18348668

鸿蒙(Harmony) NEXT 9月份就要正式上架了,并且不会再兼容安卓平台,于是我也赶紧给App开发鸿蒙版本,接下来会写一系列的Harmony开发教程。

今天使用AlphabetIndexer实现联系人字母索引,AlphabetIndexer是官方封装好的组件

咱们实现后的效果图:

代码实现

首先在aboutToAppear方法中初始化数据,aboutToAppear方法相当于安卓开发中Activity的onCreate,遍历字符串列表,使用pinyin-pro框架转成拼音,再截取首字母转成大写,最后对数组进行排序,规则是:A-Z-#

initData(){const nameList = ["白虎","白天","白痴","常羲","嫦娥","二郎神","伏羲","观世音","精卫","夸父","789范德萨范德萨","女娲","哪吒","盘古","青龙","如来","孙悟空","沙僧","顺风耳","太白金星","太上老君","羲和","玄武","猪八戒","朱雀","祝融","Abbey","Steven","Elizabeth","しんのすけ"];for(let i=0;i<nameList.length;i++){let pinyinStr=pinyin(nameList[i], { toneType: "none" });//根据姓名获取拼音let index=pinyinStr.substring(0,1).toUpperCase();// 获取拼音首字母并转成大写if (!/^[A-Z]$/.test(index)) { // 如果不在A-Z中则默认为“#”index = "#";}console.log(nameList[i]+" index:"+index)this.list.push(new Contact(index, nameList[i]));}this.list.sort((a, b) => {if (a.index === b.index) {return a.name.localeCompare(b.name);}if (a.index === "#") {return 1;}if (b.index === "#") {return -1;}return a.index.localeCompare(b.index);});
}

数据准备好了,接下来如何展示在界面上,ArkTS UI非常简单,不像安卓要写适配器、IOS要写Cell,@Component组件必须要重写build方法,在build方法中实现界面逻辑,首先最外层使用Row容器组件,一行显示,

  • 左边使用List组件加载列表,在循环列表中通过if判断是否显示字母
  • 右边使用AlphabetIndexer组件展示26个字母,实现onSelect方法,用户选中字母会回调这个方法
build() {Row() {List({ space: 0, initialIndex: 0,scroller:this.scroller}){//加载列表ForEach(this.list, (item:Contact,index) => {ListItem() {Column(){if (index==0||this.list[index-1].index != item.index){Text(item.index).width('100%').fontColor('#333333').fontSize(14).backgroundColor("#EAEAEA").padding({top:5,bottom:5,left:15})}Text(item.name).fontSize(30).padding({top:15,bottom:15,left:15})}.alignItems(HorizontalAlign.Start)}}, (item:Contact) => util.generateRandomUUID(true))//key随机生成}.layoutWeight(1).scrollBar(BarState.Off).height('100%').divider({color:'#E5E5E5',strokeWidth:0.5})AlphabetIndexer({ arrayValue: this.value, selected: 0}).selectedColor(0xFFFFFF) // 选中项文本颜色.popupColor(0xFFFAF0) // 弹出框文本颜色.selectedBackgroundColor(0xCCCCCC) // 选中项背景颜色.popupBackground(0xD2B48C) // 弹出框背景颜色.usingPopup(false) // 是否显示弹出框.selectedFont({ size: 16, weight: FontWeight.Bolder }) // 选中项字体样式.popupFont({ size: 30, weight: FontWeight.Bolder }) // 弹出框内容的字体样式.itemSize(22) // 每一项的尺寸大小.alignStyle(IndexerAlign.Left) //弹出框在索引条右侧弹出.onSelect((index: number) => {console.info(this.value[index] + ' Selected!')this.onSelectIndexItem(this.value[index]);})}.width('100%').height('100%')
}

当用户选中某个字母时,循环遍历索引位置,通过scroller滚动到指定位置

onSelectIndexItem(index:string){for (let i=0;i<this.list.length;i++){console.log("名字:"+this.list[i].name+" index1:"+this.list[i].index+" index2:"+index)if (this.list[i].index == index){this.scroller.scrollToIndex(i)//滚动到索引位置break ;}}
}

AlphabetIndexer还可以通过usingPopup设置是否使用提示弹窗,大家可以自己去看API文档。如果是安卓开发,实现这个功能代码还是蛮多的,鸿蒙100行代码就能实现这个功能了。

源码下载

源码:

https://github.com/ansen666/AlphabetIndexer

AlphabetIndexer组件API官方文档:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V2/ts-container-alphabet-indexer-0000001427744828-V2

pinyin-pro框架:

https://ohpm.openharmony.cn/#/cn/detail/pinyin-pro

如果你想第一时间看我的后期文章,扫码关注公众号

      安辉编程笔记 - 开发技术分享扫描二维码加关注

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

window下redis的安装

下载地址:https://github.com/tporadowski/redis/releases Windows下的.msi安装和.zip格式区别:.msi是Windows installer开发出来的程序安装文件,它可以让你安装,修改,卸载你所安装的程序。说白了.msi就是Windows installer的数据包,把所有和安装文件相关的内容封装在一…

最全vue面试题,vue知识点

1、MVC 和 MVVM 区别 MVC MVC全名是 Model View Controller,时模型 - 视图 - 控制器的缩写,一种软件设计典范。Model(模型):是用于处理应用程序数据逻辑部分。通常模型对象负责在数据库中存取数据。 View(视图):是应用程序中处理数据显示的本分。通常视图是依据模型数据创建…

生猪

近期将迎来回调

使用xshell连接阿里云远程服务器(图文教程)

1. 参考资料:阿里云官方帮助资料: https://help.aliyun.com/document_detail/71529.html?spm=a2c4g.11186623.6.616.JqUSgl2. 准备条件:1). 登录阿里云官网,申请阿里云ECS服务器请参考网上其他教程,或者自己申请一下就好。2). 下载Xshell客户端推荐Xshell软件链接:http:…

AI自动化应用开发,让创意与效率并驾齐驱!

在这个日新月异的时代,人工智能(AI)与自动化技术的融合正以前所未有的速度重塑着各行各业。你是否梦想过,在信息的海洋中自动筛选出精华,用创意点亮每一篇内容,同时让繁琐的工作流程变得轻松高效?现在,机会来了!我们诚邀您参加即将开启的“AI自动化应用开发”公开课,…

【AI+安全】态势感知之数据可视化技术分析与实现

一、可视化的设计原则1.1 可视化设计流程1.2 交互式设计原则1.3 场景化设计二、可视化前端实现的关键技术2.1 图表库的选择2.2 Canvas2.3 WebGL三、通用数据可视化平台的搭建四、新华三态势感知的可视化实现4.1 3D 整网威胁态势呈现4.2 资产态势呈现4.3 脆弱性态势结束语可视化…

K8S云原生-高可用集群部署V1.28.2

一、环境准备K8S集群角色 IP 主机名 安装相关组件master 10.1.16.160 hqiotmaster07l apiserver、controller-manager、scheduler、kubelet、etcd、docker、kube-proxy、keepalived、nginx、calicomaster 10.1.16.161 hqiotmaster08l apiserver、controller-manager、scheduler…

CF708C Centroids

题意 来自洛谷:思路 记录每个点 \(u\) 所在子树可以删去的最大的部分 \(part1\) 和次大的部分 \(part2\) 和除了 \(u\) 的子树以外的部分可以删去的最大的部分 \(up\),这个部分必须要求小于等于 \(\dfrac{n}{2}\),和找树的中心(注意不是重心)的思路差不多。 注意:\(part1…

portainer 安装

第一步:在docker仓库查找portainer的版本 docker search portainer 注意,docker portainer有两个版本:portainer/portainer 和 portainer/portainer-ce:portainer/portainer是早期版本,已不再更新 portainer/portainer-ce是新版本,使用新版本docker pull portainer/porta…

vscode打开关闭编辑区域顶部固定区域 顶部有一段行数距离高度 StickyScroll

在定位区域右键,粘滞滚动取消选择即可打开方式,在设置搜索stickyscroll 勾选即可 好好学习天天向上

hive04_DQL操作

注意点 全局排序 OrderBy SELECT <select_expression>, <select_expression>, ...FROM <table_name>ORDER BY <col_name> [ASC|DESC] [,col_name [ASC|DESC], ...]Hive 中使用全局排序时,会将所有数据交给一个 Reduce 任务进行计算,实现查询结果的全…