HarmonyOS7 SegmentedStrengthBar 教程:用分段进度条实现密码强度提示
文章目录前言适用场景实现思路完整代码逐段读代码第一处关键代码第二处关键代码第三处关键代码容易忽略的细节再往前走一步容易被忽略的小地方写在最后前言这个案例最有价值的地方是它告诉你一个普通 Progress 组件也能通过组合做出业务感很强的效果。 这也是我很喜欢拿来讲 ArkUI 的一类例子因为它足够小却能把状态、布局和反馈三件事串起来。 这篇更适合边读边对照代码因为很多细节只有放在页面行为里才看得出来。这篇我会重点从多视图组合方式这个角度往下讲。不是为了把每个属性都讲一遍而是帮你建立一个更接近真实开发的阅读顺序先看页面目标再看状态流最后再看样式怎么收口。适用场景读这段代码时先看用户会做什么再看代码为什么这样写会顺很多。“Progress 分段进度”这种能力单独演示时很轻落到项目里却往往要和表单、列表、卡片或者反馈区绑在一起这也是这个案例值得细看的原因。这一类写法常见在 下载中心、上传页、任务看板、加载反馈 这些页面里。你只要把示例里的交互换成自己的业务文案再把静态数据换成真实数据源骨架基本就够用了。示例读不明白时最好的办法不是多看几遍属性表而是先把页面里的角色关系搞明白。如果你后面要把示例改成线上页面别急着先美化先确认 状态字段和展示结果有没有保持同一份数据来源避免页面看起来“能动”但结果不可信。实现思路页面最外层通常先用Column把主轴定下来这一步看起来普通但它决定了后面所有内容是顺着读还是碎着看。这个例子没有刻意把结构做复杂反而更方便你看清主交互区和说明区是怎么分层的。像Row这种并排容器真正的价值不是“能横着排”而是帮你把对比关系直接摆给用户看。数字、标签、刻度、按钮放在一起时理解速度会快很多。第 20 篇案例在布局上最值得学的地方是它没有为了展示组件能力去强行堆内容而是尽量让每一块区域都有明确职责。这样的代码后面更好拆组件。完整代码下面这份代码保留了案例本身的实现思路但把示例编号替换成了更自然的英文命名。你直接拿去做实验、拆段运行阅读成本会低很多。/** * SegmentedStrengthBar - Progress 分段进度 */import{PRESET_COLORS,generateListItems,PAGE_BG_COLOR,PANEL_BG_COLOR,ACCENT_COLOR,MUTED_TEXT_COLOR}from./typesEntryComponentstruct SegmentedStrengthBar{StateisShow:booleantruebuild(){Column(){if(this.isShow){Column(){Text(Progress 分段进度).fontSize(16).fontWeight(FontWeight.Bold).margin({bottom:16})Text(密码强度).fontSize(14).fontWeight(FontWeight.Bold).margin({bottom:10})Row({space:6}){Progress({value:25,total:100,type:ProgressType.Linear}).width(60).height(8).color(PRESET_COLORS[0].value)Progress({value:0,total:100,type:ProgressType.Linear}).width(60).height(8).color(#E8E8E8)Progress({value:0,total:100,type:ProgressType.Linear}).width(60).height(8).color(#E8E8E8)Progress({value:0,total:100,type:ProgressType.Linear}).width(60).height(8).color(#E8E8E8)}Text(强度: 弱).fontSize(12).fontColor(PRESET_COLORS[0].value).margin({top:6,bottom:20})Text(中强度密码).fontSize(14).fontWeight(FontWeight.Bold).margin({bottom:10})Row({space:6}){ForEach([0,1,2,3],(i:number){Progress({value:i3?100:0,total:100,type:ProgressType.Linear}).width(60).height(8).color(i3?PRESET_COLORS[2].value:#E8E8E8)})}Text(强度: 中等).fontSize(12).fontColor(PRESET_COLORS[2].value).margin({top:6,bottom:20})Text(高强度密码).fontSize(14).fontWeight(FontWeight.Bold).margin({bottom:10})Row({space:6}){ForEach([0,1,2,3],(i:number){Progress({value:100,total:100,type:ProgressType.Linear}).width(60).height(8).color(PRESET_COLORS[3].value)})}Text(强度: 强).fontSize(12).fontColor(PRESET_COLORS[3].value).margin({top:6})Text(用多个 Progress 组件实现分段效果).fontSize(11).fontColor(MUTED_TEXT_COLOR).margin({top:14})}.width(100%).padding(16).backgroundColor(PANEL_BG_COLOR).borderRadius(12).alignItems(HorizontalAlign.Center)}Text(Progress 分段).fontSize(12).fontColor(MUTED_TEXT_COLOR).margin({top:12})}.width(100%).height(100%).backgroundColor(PAGE_BG_COLOR).padding(16)}}逐段读代码第一处关键代码State isShow: boolean true这一行先别急着略过它通常就是页面状态的起点。后面很多显示内容都会跟着它一起变化。 对进度类页面来说再往后多看一眼它有没有和任务状态、文案反馈一起出现。第二处关键代码Progress({ value: 25, total: 100, type: ProgressType.Linear })如果你只打算先读几行代码我会优先看这一类因为它通常正处在页面主路径上。 对进度类页面来说再往后多看一眼它有没有和任务状态、文案反馈一起出现。第三处关键代码Progress({ value: 0, total: 100, type: ProgressType.Linear })它不是整段代码里最复杂的部分却往往是最先影响使用体验的部分。 对进度类页面来说再往后多看一眼它有没有和任务状态、文案反馈一起出现。容易忽略的细节很多人第一次读示例会从头到尾扫一遍但更高效的做法其实是先看下面这些触发点ForEach([0, 1, 2, 3], (i: number) {ForEach([0, 1, 2, 3], (i: number) {对进度类页面来说交互不一定来自手点很多时候来自任务本身的推进所以状态源头要比样式更重要。这里最值得养成的习惯是顺手确认结果值到底存在哪。状态一多页面最容易出的问题不是不刷新而是刷出来的不是同一个结果。真准备继续往下改时我会先把输入值、结果值和提示文案拆开存。这样后面无论是加校验还是加动画都不容易把build()变成大杂烩。再往前走一步真要把这个案例拿去改业务页面我会按下面这个顺序动手把演示用的静态数据替换成真实数据源别等接口接进来以后再改页面结构。把重复出现的卡片、标题栏、结果区提成小组件后面加状态会轻松很多。提前补上异常态比如空值、失败态、禁用态、超范围输入否则示例一进业务就会露怯。如果是进度页我会补上任务状态文案比如进行中、暂停、完成、失败因为用户读的不是条而是结果。这里最容易被忽略的一点是 状态字段和展示结果有没有保持同一份数据来源避免页面看起来“能动”但结果不可信。 这个问题。很多示例在静态数据下看不出毛病一接真实状态就开始暴露问题所以这一步最好趁早做。容易被忽略的小地方有些细节在第一眼看代码时很容易被跳过去但它们往往决定了页面是不是耐改。State不是装饰器样板它决定了哪些数据变化后会重新驱动画面。看到ForEach时顺手检查一下列表项是不是结构稳定、职责单一这会直接影响后续抽组件的成本。对于 Progress 类页面我会特别留意文案反馈是不是跟着用户动作一起变化因为这直接影响页面有没有“会说话”的感觉。这些东西单看都不复杂组合在一起才是一个案例真正的完成度。写在最后把这篇读透之后你再回头看同类控件会更容易判断哪些是核心参数哪些只是表面样式。把这份案例读成“一个可以继续长大的页面骨架”你后面改业务时会轻松很多。

相关新闻

社交货币卫衣:二手潮牌背后的消费心理与文化逻辑

社交货币卫衣:二手潮牌背后的消费心理与文化逻辑

1. 先搞清楚“社交货币”卫衣到底是什么 最近在社交媒体和二手交易平台上,一种现象开始引起注意:一些特定款式的二手卫衣,价格被炒到250美元甚至更高,成为部分年轻人眼中的“社交货币”。这不是普通的二手衣服买卖,而是…

2026/7/27 23:50:28阅读更多 →
Linux信号机制:原理、应用与最佳实践

Linux信号机制:原理、应用与最佳实践

1. Linux信号机制概述 在Linux系统中,信号是一种进程间通信的基本机制,用于通知进程发生了某种事件。当我们在终端按下CtrlC终止程序时,实际上就是通过发送SIGINT信号来实现的。信号机制最早出现在Unix系统中,经过几十年的发展已经…

2026/7/29 0:27:49阅读更多 →
HarmonyOS应用开发实战:猫猫大作战-这三种手段的取舍

HarmonyOS应用开发实战:猫猫大作战-这三种手段的取舍

前言 前 4 篇我们拆完了主菜单的原子元素——标题、按钮、规则卡片。但把它们堆进一个 Column 容器时,「间距控制」就成了核心问题:标题与按钮之间该留多少?按钮与规则面板之间该留多少?整体顶部该留多少? HarmonyOS…

2026/7/27 23:50:28阅读更多 →
嵌入式OLED显示实战:从驱动到波形与菜单的完整实现

嵌入式OLED显示实战:从驱动到波形与菜单的完整实现

1. 项目概述:OLED显示的魅力与挑战“OLED显示图像和波形”这个标题,乍一看似乎只是单片机开发中的一个基础功能模块。但在我十多年的嵌入式开发生涯里,这个看似简单的任务,恰恰是区分“能跑通代码”和“真正理解显示系统”的一道分…

2026/7/29 3:12:28阅读更多 →
硬纸板与面包线:零基础电子制作入门与创意实践

硬纸板与面包线:零基础电子制作入门与创意实践

1. 项目概述:当硬纸板遇上电路,创意即刻通电“盒仔家里造”,这个名字听起来就带着一股子亲切的动手乐趣和无限的可能性。它不是一个遥不可及的科技项目,而是一个邀请函,邀请你利用身边最触手可及的材料——一张废弃的硬…

2026/7/29 3:12:28阅读更多 →
UE5游戏开发:基于UObject与数据资产的高效物品系统设计与实现

UE5游戏开发:基于UObject与数据资产的高效物品系统设计与实现

1. 项目概述与核心需求在UE5独立游戏《星尘异变》的开发中,我们经常需要处理大量、结构复杂的游戏物品数据,比如玩家拾取的矿石、装备的武器、消耗的药剂,或是飞船的改装部件。这些数据不仅仅是几个简单的数值,它们往往包含名称、…

2026/7/29 3:12:28阅读更多 →
从零构建Arduino水位报警系统:传感器选型、电路设计与代码实战

从零构建Arduino水位报警系统:传感器选型、电路设计与代码实战

1. 项目概述:从水位监测到智能报警在工业自动化、环境监测乃至家庭安防领域,水位监测都是一个基础且关键的需求。想象一下,一个无人值守的水箱、一个需要保持恒定液位的化学反应釜,或者一个雨季容易积水的地下室,我们如…

2026/7/29 3:12:28阅读更多 →
Flutter插件在OpenHarmony上的适配实践

Flutter插件在OpenHarmony上的适配实践

1. 项目背景与核心价值Flutter作为Google推出的跨平台开发框架,其生态系统中拥有超过2万个第三方插件。但当开发者尝试将Flutter应用迁移到OpenHarmony操作系统时,往往会遇到插件兼容性问题。flutter_web_auth就是一个典型例子——这个用于OAuth认证的流…

2026/7/29 3:12:28阅读更多 →
大模型应用开发实战:从提示词工程到企业级部署全流程

大模型应用开发实战:从提示词工程到企业级部署全流程

这次我们来看一套完整的大模型应用开发实战教程,重点不是讲概念,而是从提示词工程到企业级落地的全流程实操。这套教程特别适合想要快速上手大模型应用开发的工程师和产品经理,内容覆盖了从基础提示词编写到复杂系统集成的关键技术点。教程的…

2026/7/29 3:10:27阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/28 4:06:39阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/28 2:08:06阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/28 1:38:28阅读更多 →
28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“! 在构建复杂的 Agent 系统时,我们经常会遇到这样的场景:Agent 正在执行一个多步骤的任务,比如“下单购买商品”,但执行到一半时,我们…

2026/7/29 0:01:46阅读更多 →
自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…

2026/7/29 0:01:46阅读更多 →
【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:01:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/28 20:22:24阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/28 3:17:03阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/28 2:35:58阅读更多 →