当前位置: 首页 > news >正文

HarmonyOS6 ArkTS Rating组件使用文档

文章目录

    • 完整代码
    • 核心参数与方法
      • 1 组件构造参数
      • 2 核心属性方法(链式调用)
        • (1)星星数量设置:stars
        • (2)评分步长设置:stepSize
        • (3)星级样式自定义:starStyle
        • (4)评分变化回调:onChange
    • 核心变量
    • 运行效果
    • 总结
      • 1 适用场景
      • 2 使用规范

完整代码

// RatingFullExample.ets @Entry @Component struct RatingFullExample { // 评分值 @State score: number = 3.5; // 是否为只读指示器 @State isIndicator: boolean = false; // 星星总数 @State starCount: number = 5; // 评分步长 @State step: number = 0.5; build() { Column({ space: 25 }) { Text("Rating 评分组件完整示例") .fontSize(26) .fontWeight(FontWeight.Bold) .margin({ top: 30 }); // 1. 默认评分组件 Column({ space: 12 }) { Text("1. 默认五星评分(步长0.5)") .fontSize(18) .alignSelf(ItemAlign.Start); Rating({ rating: this.score, indicator: this.isIndicator }) .stars(this.starCount) .stepSize(this.step) .onChange((value: number) => { this.score = value; console.info("当前评分:" + value); }) .width(300) .height(40); Text(`当前得分:${this.score.toFixed(1)}`) .fontSize(16) .fontColor("#007DFF"); } .width("90%") .padding(15) .backgroundColor("#F5F5F5") .borderRadius(12); // 2. 控制区 Column({ space: 15 }) { Text("2. 功能控制") .fontSize(18) .alignSelf(ItemAlign.Start); // 切换只读指示器 Row({ space: 10 }) { Text("只读模式(指示器):") .fontSize(16); Toggle({ type: ToggleType.Switch, isOn: this.isIndicator }) .onChange((val) => { this.isIndicator = val; }); } // 步长切换 Row({ space: 10 }) { Text("评分步长:") .fontSize(16); Button(this.step === 0.5 ? "0.5(半星)" : "1.0(整星)") .onClick(() => { this.step = this.step === 0.5 ? 1.0 : 0.5; }) .width(140); } // 星星数量 Row({ space: 10 }) { Text("星星数量:") .fontSize(16); Button(`星星数:${this.starCount}`) .onClick(() => { this.starCount = this.starCount >= 10 ? 5 : this.starCount + 1; }) .width(120); } } .width("90%") .padding(15) .backgroundColor("#F5F5F5") .borderRadius(12); // 3. 自定义样式评分(使用系统默认样式,可替换图片) Column({ space: 12 }) { Text("3. 自定义样式评分") .fontSize(18) .alignSelf(ItemAlign.Start); Rating({ rating: this.score, indicator: false }) .stars(5) .stepSize(0.5) .starStyle({ backgroundUri: "", // 未选中星(空则使用系统默认) foregroundUri: "", // 选中星(空则使用系统默认) secondaryUri: "" // 半星(可选) }) .onChange((value) => { this.score = value; }) .width(300) .height(40); } .width("90%") .padding(15) .backgroundColor("#F5F5F5") .borderRadius(12); } .width("100%") .padding(10) .backgroundColor("#fff") } }

运行效果如图:

核心参数与方法

1 组件构造参数

参数名类型必选/可选说明示例
ratingnumber可选设置组件默认评分值,支持小数3.5
indicatorboolean可选设置组件模式,true=只读指示器,false=可交互评分false

2 核心属性方法(链式调用)

(1)星星数量设置:stars
  • 类型:number
  • 说明:设置评分组件的星星总数,默认值为 5
  • 示例:.stars(this.starCount)
(2)评分步长设置:stepSize
  • 类型:number
  • 说明:设置评分最小间隔,支持0.5(半星)1.0(整星)
  • 示例:.stepSize(this.step)
(3)星级样式自定义:starStyle
  • 类型:RatingStyle
  • 说明:配置星级图标资源,属性为空时使用系统默认图标
    | 属性名 | 说明 |
    |--------|------|
    | backgroundUri | 未选中星级图标路径 |
    | foregroundUri | 选中星级图标路径 |
    | secondaryUri | 半星图标路径(可选) |
  • 示例:
.starStyle({ backgroundUri: "", foregroundUri: "", secondaryUri: "" })
(4)评分变化回调:onChange
  • 回调参数:value: number(当前选中的评分值)
  • 说明:用户滑动/点击评分时触发,可实时更新评分数据、打印日志
  • 示例:
.onChange((value: number) => { this.score = value; console.info("当前评分:" + value); })

核心变量

变量名类型初始值作用
scorenumber3.5绑定组件评分值,实时存储并展示当前评分
isIndicatorbooleanfalse控制组件模式,切换可交互/只读状态
starCountnumber5控制评分组件的星星总数
stepnumber0.5控制评分步长,切换半星/整星模式

运行效果

  1. 默认评分区域:初始化展示 5 颗星星,默认评分 3.5,支持半星选择,下方实时显示当前得分;
  2. 功能控制区域
    • 开关开启后,评分组件变为只读模式,无法点击/滑动修改评分;
    • 按钮可切换0.5 半星1.0 整星两种步长;
    • 点击按钮可递增星星数量,达到 10 颗后重置为 5 颗;
  3. 自定义样式区域:使用系统默认星级图标,可通过填写图标路径替换为自定义样式,评分状态与全局评分同步;
  4. 所有操作触发的评分变化,均会实时更新页面数据,并在控制台打印评分日志。

总结

1 适用场景

  • 用户评价、商品评分、服务打分等可交互评分场景;
  • 个人等级、商家评分、作品评分等只读展示场景;
  • 配置类页面、个性化设置中的星级选择场景。

2 使用规范

  1. 交互模式:需要用户主动评分时,设置indicator: false;仅用于展示分数时,设置indicator: true
  2. 步长选择:追求精细评分使用 0.5 步长,简约评分使用 1.0 步长;
  3. 样式规范:自定义图标需保持尺寸一致,避免星星显示错位;
  4. 数据绑定:必须使用状态变量绑定评分,保证数据响应式更新。

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

http://www.jsqmd.com/news/670630/

相关文章:

  • PINN实战避坑:为什么你的神经网络解PDE不收敛?从损失函数设计到调参全解析
  • 高精度计算插件 decimal.js 处理 JS 浮点数精度问题(. + . !== .)
  • 20辆电动汽车29个月真实充电数据深度解析:电池健康状态评估实战指南
  • AGI训练数据合规困局(2024全球监管图谱首发):OpenAI、Meta、DeepSeek的7种数据治理路径对比
  • 从零上手:PyCharm专业版远程连接AutoDL服务器实战指南
  • 2026云南非开挖电力管道施工公司TOP5权威榜单 全滇正规顶管、定向钻服务商 - 深度智识库
  • 从录音到混音:Audition振幅统计的实战指南,让你的播客/视频人声电平不再‘飘忽不定’
  • Vivado FIR IP核仿真避坑指南:从Testbench编写到波形Analog显示全解析
  • 《从批量拉群到定时发送:企销宝全流程自动化运营方案》
  • 用STM32F103C8T6做个会说话的智能垃圾桶:从HC-SR04到LU-ASR01的保姆级教程
  • Url编码
  • Qt界面下拉框卡死?IMX8MQ平台下Weston 3.0.0与Qt 5.9.0的兼容性排查实战
  • 音频标注新选择:Audio Annotator 让声音数据标记变得简单高效
  • Balena Etcher:开源系统镜像烧录的终极指南
  • 永辉超市购物卡折现攻略,简单高效又实用! - 团团收购物卡回收
  • SpringBoot+MyBatis项目实战复盘:我如何用一周时间搞定一个旅行社管理后台?
  • Android Studio中文界面终极配置:告别英文困扰,开启母语开发之旅![特殊字符]
  • Locale Emulator 终极指南:如何在不修改系统区域设置的情况下运行多语言应用
  • MacBook充电时断时续?别急着送修,先试试这5步排查法(含SMC/NVRAM重置详解)
  • Google Colab免费GPU突然连不上?别慌,这5个排查步骤和3个替代方案帮你搞定
  • AgentCPM深度体验:流式输出看报告如何“生长”,研究效率翻倍
  • 科研绘图救星:用这个MATLAB函数,让你的论文图表配色秒变“Nature/Science风”
  • 告别单调界面:用LVGL的Tile View为你的智能手表UI做个『L形』导航(附完整代码)
  • Arduino新手避坑指南:面包板电路搭建最常见的5个错误(附解决方案)
  • 5分钟快速上手FF14动画跳过插件完整教程
  • 实战突破:VBA-JSON在Office环境中实现高效JSON数据处理的创新方案
  • NaViL-9B双卡部署详解:nvidia-smi显存监控与负载分配技巧
  • 中兴光猫终极解锁:zteOnu工具完整使用指南
  • 第九只鹿:从“试错”到“信赖”,用实力赢得万千品牌认可 - 资讯焦点
  • 别再问网速为啥慢了!一文搞懂手机里的‘多车道’技术:4G/5G载波聚合CA