HarmonyOS6 半年磨一剑 - RcList 组件综合示例与尺寸计算

HarmonyOS6 半年磨一剑 - RcList 组件综合示例与尺寸计算

文章目录

前言

Hello 各位开发者们大家好, 我是若城,今天我们开始对Rchoui三方库新的组件开始讲解, 本期我们主要讲解的是 RcList 这个组件, 话不多说我们先看下效果图吧~~~

开源计划

项目预计于 2026 年 7 月中旬正式开源,届时可通过三方库直接下载使用。在此期间,我会通过系列文章逐一介绍每个模块的设计思路与实现细节。

rchoui 官网

目前暂定 rchoui 官网地址:http://rchoui.ruocheng.site/

需要注意的是,当前官网还在完善当中,会在后续更新中逐步完善,届时可以为大家提供更加完善的说明文档。

一、尺寸计算与工具函数

1.1 getSizeByUnit 的作用

getSizeByUnitRcStringNumberstring | number)统一转换为 ArkUI 组件属性可接受的值:

// 来自 utils.ts(简化示意)exportfunctiongetSizeByUnit(size:string|number):string|number{if(typeof size ==='number'){return size // 数字直接返回(单位为 vp)}return size // 字符串直接返回(支持 '100%'、'50vp' 等)}

这让 rcListWidthrcListHeightrcListSpace 等属性既可以传 100(数字 vp)也可以传 '100%'(百分比字符串)。

1.2 不透明度与禁用状态

// RcListItem build() 中的禁用视觉.opacity(this.rcListItemDisabled ?0.6:1)

使用全局 opacity 实现禁用效果比逐一修改子元素颜色更高效,整个列表项(包括缩略图、图标、文字)统一降低到 60% 透明度,视觉上一致地传达"不可用"状态。


二、完整实战示例

以下是一个综合展示缩略图、角标、额外图标三套系统的完整可运行页面:

import{ RcList, RcListItem }from'rchoui'@Entry@ComponentV2 struct RcListVisualSystemDemo {build(){Scroll(){Column({ space:20}){Text('视觉富化系统演示').fontSize(22).fontWeight(FontWeight.Bold).margin({ top:20, bottom:8})// ========== 缩略图系统 ==========Text('缩略图尺寸与圆角').fontSize(16).fontColor('#303133').margin({ bottom:4})RcList({ rcListBorder:true}){RcListItem({ rcListItemTitle:'小尺寸 40x40', rcListItemNote:'方形圆角,适合应用图标', rcListItemThumb:$r('app.media.startIcon'), rcListItemThumbSize:'small', rcListItemThumbRadius:8, rcListItemClickable:true})RcListItem({ rcListItemTitle:'中尺寸 60x60', rcListItemNote:'适中圆角,联系人头像', rcListItemThumb:$r('app.media.startIcon'), rcListItemThumbSize:'medium', rcListItemThumbRadius:12, rcListItemClickable:true})RcListItem({ rcListItemTitle:'大尺寸 + 正圆', rcListItemNote:'半径等于尺寸一半,形成正圆', rcListItemThumb:$r('app.media.startIcon'), rcListItemThumbSize:80, rcListItemThumbRadius:40, rcListItemClickable:true, rcListItemShowBorder:false})}// ========== 角标系统 ==========Text('角标系统三种形态').fontSize(16).fontColor('#303133').margin({ bottom:4})RcList({ rcListBorder:true}){RcListItem({ rcListItemTitle:'数字角标', rcListItemNote:'显示未读消息数量', rcListItemThumb:$r('app.media.startIcon'), rcListItemThumbSize:'medium', rcListItemShowBadge:true, rcListItemBadge:{ value:8}, rcListItemClickable:true})RcListItem({ rcListItemTitle:'超限截断', rcListItemNote:'超过 99 显示为 99+', rcListItemThumb:$r('app.media.startIcon'), rcListItemThumbSize:'medium', rcListItemShowBadge:true, rcListItemBadge:{ value:150, max:99}, rcListItemClickable:true})RcListItem({ rcListItemTitle:'点状角标', rcListItemNote:'仅提示有新内容', rcListItemThumb:$r('app.media.startIcon'), rcListItemThumbSize:'medium', rcListItemShowBadge:true, rcListItemBadge:{ isDot:true, color:'#fa3534'}, rcListItemClickable:true})RcListItem({ rcListItemTitle:'文字角标', rcListItemNote:'自定义颜色蓝色', rcListItemThumb:$r('app.media.startIcon'), rcListItemThumbSize:'medium', rcListItemShowBadge:true, rcListItemBadge:{ value:'NEW', color:'#409eff'}, rcListItemClickable:true, rcListItemShowBorder:false})}// ========== 额外图标系统 ==========Text('额外图标(矢量图标)').fontSize(16).fontColor('#303133').margin({ bottom:4})RcList({ rcListBorder:true}){RcListItem({ rcListItemTitle:'消息通知', rcListItemNote:'蓝色图标', rcListItemShowExtraIcon:true, rcListItemExtraIcon:{ name:'icon-houi_bell_outline', color:'#409eff', size:22}, rcListItemClickable:true})RcListItem({ rcListItemTitle:'下载管理', rcListItemNote:'绿色图标', rcListItemShowExtraIcon:true, rcListItemExtraIcon:{ name:'icon-houi_download_outline', color:'#67c23a', size:22}, rcListItemClickable:true})RcListItem({ rcListItemTitle:'应用设置', rcListItemNote:'灰色图标', rcListItemShowExtraIcon:true, rcListItemExtraIcon:{ name:'icon-houi_settings_outline', color:'#909399', size:22}, rcListItemClickable:true, rcListItemShowBorder:false})}// ========== 本地图片图标 ==========Text('额外图标(本地图片)').fontSize(16).fontColor('#303133').margin({ bottom:4})RcList({ rcListBorder:true}){RcListItem({ rcListItemTitle:'本地图片图标', rcListItemNote:'通过 $r() 引用', rcListItemShowExtraIcon:true, rcListItemExtraIcon:{ name:$r('app.media.startIcon'), size:24}, rcListItemClickable:true, rcListItemShowBorder:false})}// ========== 三系统综合使用 ==========Text('综合:图标 + 缩略图 + 角标').fontSize(16).fontColor('#303133').margin({ bottom:4})RcList({ rcListBorder:true}){RcListItem({ rcListItemTitle:'消息中心', rcListItemNote:'图标 + 缩略图 + 数字角标', rcListItemThumb:$r('app.media.startIcon'), rcListItemThumbSize:'medium', rcListItemThumbRadius:8, rcListItemShowBadge:true, rcListItemBadge:{ value:3, color:'#fa3534'}, rcListItemShowExtraIcon:true, rcListItemExtraIcon:{ name:'icon-houi_message_circle_outline', color:'#409eff', size:20}, rcListItemRightText:'查看全部', rcListItemClickable:true, rcListItemShowBorder:false})}Text('以上展示了三套视觉系统的全部形态').fontSize(13).fontColor('#909399').textAlign(TextAlign.Center).margin({ top:16, bottom:30})}.width('100%').padding(16)}.width('100%').height('100%').backgroundColor('#f5f5f5')}}

三、视觉样式对照表

3.1 缩略图参数速查

参数类型默认值说明
rcListItemThumbResourceStr''图片资源(本地/网络/base64)
rcListItemThumbSize'small' / 'medium' / 'large' / number'medium'尺寸
rcListItemThumbRadiusRcStringNumber4圆角半径

3.2 角标参数速查

参数类型默认值说明
rcListItemShowBadgebooleanfalse是否显示角标
rcListItemBadge.valuestring / number-角标内容
rcListItemBadge.isDotbooleanfalse是否点状角标
rcListItemBadge.colorResourceColor'#fa3534'角标颜色
rcListItemBadge.maxnumber99最大值(超出显示 N+)

3.3 额外图标参数速查

参数类型默认值说明
rcListItemShowExtraIconbooleanfalse是否显示额外图标
rcListItemExtraIcon.namestring / ResourceStr-图标名或图片资源
rcListItemExtraIcon.colorResourceColor主题色图标颜色(仅矢量图标有效)
rcListItemExtraIcon.sizeRcStringNumber20图标尺寸

总结

RcList 的视觉富化系统由缩略图角标额外图标三个子系统有机组合而成。缩略图通过 Stack 叠加实现了角标依附效果,额外图标通过类型联合支持矢量与图片双模式,角标通过智能截断和多形态适配了真实业务场景。三套系统可以独立使用,也可以自由组合,灵活性极强。

在实际开发中,建议遵循以下原则:内容型列表(头像、商品)使用缩略图,功能型列表(设置、菜单)使用额外图标,消息提示场景搭配角标系统,将视觉信息层次做到最优。

如果这篇文章对你有帮助,欢迎点赞、收藏、关注,你的支持是我持续创作的动力!

Read more

JAVA最新版本详细安装教程(附安装包)

JAVA最新版本详细安装教程(附安装包)

目录 文章自述 一、JAVA下载 二、JAVA安装 1.首先在D盘创建【java/jdk-23】文件夹 2.把下载的压缩包移动到【jdk-23】文件夹内,右键点击【解压到当前文件夹】 3.如图解压会有【jdk-23.0.1】文件 4.右键桌面此电脑,点击【属性】 5.下滑滚动条,点击【高级系统设置】 6.点击【环境变量】 7.找到系统变量(S),然后点击【新建】 8.输入变量名和变量值 9.确认无误,点击【确定】 10.继续点击系统变量下的【新建】 11.输入变量名和变量值

Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)

Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)

Hiヽ(゜▽゜ )-欢迎来到蓝染Aizen的ZEEKLOG博客~ 🔥博客主页: 【✨蓝染 の Blog😘】 💖感谢大家点赞👍收藏⭐评论✍ 文章目录 * 一、JavaFx介绍 * 1、JavaFx简介 * 2、可用性 * 3、主要特征 * 4、UI控件 * 二、JavaFx概述 * 1、JavaFx结构图 * 2、JavaFx组件 * (1)舞台 * (2)场景 * ① 场景图 * ② 节点 * (3)控件 * (4)布局 * (5)图表 * (6)2D图形 * (7)3D图形 * (8)声音 * (9)视频 * 三、JavaFx快速入门 * 1、IDEA配置JavaFx环境

Java外功精要(6)——Spring事务及其传播机制

Java外功精要(6)——Spring事务及其传播机制

1.概述 Spring事务管理是Spring框架中用于确保数据库操作 原子性、一致性、隔离性和持久性(ACID) 的核心机制。它通过声明式或编程式(本文略)方式管理事务,支持多种事务传播行为和隔离级别相较于编程式事务,声明式事务通过@Transactional注解实现事务管理,无需手动编写事务代码事务基本概念在全面解析MySQL(5)——“索引、事务、JDBC”三大核心一文中有介绍,本文不再赘述 2.@Transactional 作用:提供声明式事务管理。它简化了在应用程序中管理数据库事务的流程。开发者只需在方法或类上添加此注解,Spring框架就会自动处理事务的开启、提交和回滚,无需手动编写事务管理代码(如 begin、commit、rollback) 级别:类 + 方法作为类注解:为类中所有public方法添加注解作为方法注解:默认仅对public方法生效 @RequestMapping("/test")@RestController@Slf4jpublicclassTestController{privatefinalUserService userService;@A

Java 多态

Java 多态

文章目录 * 多态 * 向上转型和向下转型 * 向上转型和重写 * 重写和重载的区别 * 动态绑定和静态绑定 * 用代码来解释什么是多态 * 向下转型 * 多态的优点 * 总结 多态 1. 什么是多态?为什么要使用多态? 简单来说是多种形态,具体来说是去完成某个事情,当不同对象去完成同一件事表现出来的不同结果/状态 打个比方就是同一个人对待不同人表现出来的形态是不同的 2. 多态实现的三个条件: 向上转型和向下转型 向上转型和重写 1. 将子类对象给父类类型的引用 父类类型 对象名 = new 子类类型() 直接赋值的 classAnimal{publicString name;publicint age;publicAnimal(String name,int age){this.name = name;this.age = age;}// 父类中的this是当前对象的引用publicvoideat(){System.out.println(

阿里云全品类 8 折券限时领,建站 / AI / 存储通用 立即领取