ArkTS 进度指示器(Progress ProgressIndicator)组件 详解

ArkTS 进度指示器(Progress / ProgressIndicator)组件 详解

鸿蒙第四期开发者活动


一、这个组件是干啥的?

进度指示器(Progress/ProgressIndicator) 是 ArkUI(ArkTS 声明式 UI 框架)提供的基础组件,用来向用户展示某个操作或任务的进度。它常见于:

文件上传/下载进度
数据加载或处理进度
安装/更新过程进度
任何有明确完成百分比的流程反馈

它的工作机制很简单:有一个当前值 value 和可选的总量 total,用它们算出进度百分比,再将这个百分比可视化表示出来。Gitee

简单来说:如果用户需要知道“还剩多少没完成”,用它最合适。


🛠 二、基本用法(入门必看)

在 ArkTS 中创建一个进度条非常直观,关键在于两个属性:

  • value:当前进度数值
  • total(可选):最大/目标值(默认是 100)
  • type:进度条的视觉样式(线性、圆形等)
Progress({
  value: 30,                 // 当前进度 30(默认 total=100)
  total: 100,                // 可选,总数是100
  type: ProgressType.Linear  // 线性进度条
})

这段代码会渲染一个线性进度条,表示 30% 的进度。Gitee


三、常用属性详解(按实战整理)

下面按开发者日常最常用的属性解释,不只是“属性是啥”,还讲什么时候用它:


1. value — 当前进度值

这个是必需的,它决定进度条的填充程度:

Progress({ value: 50 })

等价于说进度是 50 / 100 = 50%(因为默认 total=100)。Gitee


2. total — 总量基准

当你的进度不是百分制时,用 total 指定基准:

Progress({ value: 40, total: 200 })

表示 40 / 200 = 20% 进度。
这在你处理文件大小(比如 40MB / 200MB)时特别好用。Gitee


3. type — 进度条样式

目前常见的取值有:

表现效果
ProgressType.Linear 线性条形进度
ProgressType.Ring 圆环进度(很多应用中用于加载中/环形百分比)
ProgressType.Eclipse 半环/月牙样式进度
ProgressType.ScaleRing 带刻度的环形进度
ProgressType.Capsule 胶囊形进度(如卡片式小进度条)

这些类型视觉效果不同,适用于不同 UI 场景:

  • Linear 适合细长进度条
  • Ring/Eclipse/ScaleRing 适合圆形提示或状态展示
  • Capsule 适合小块式状态反馈 场景CSDN

📐 四、视觉样式控制(让进度跟设计稿一致)

不仅仅是显示数字,还能控制视觉细节,比如线条粗细、刻度间距等:

Progress({
  value: 50,
  type: ProgressType.ScaleRing
})
.style({
  strokeWidth: 20,     // 圆环线宽
  scaleCount: 30,      // 刻度数量(环形刻度显示)
  scaleWidth: 9        // 每个刻度宽度
})

这种写法常见于仪表盘/健康类、计步/健身进度场景。CSDN


五、实战写法示例(像项目里写的一样)

下面给几个真实场景的代码示例,便于你直接复制到 DevEco Studio 里使用:


1. 线性加载进度(常见于列表/网络请求)

@State private progress: number = 0;

build() {
  Column({ space: 12, alignItems: ItemAlign.Center }) {
    Text(`加载中:${this.progress}%`)
      .fontSize(16)
    Progress({
      value: this.progress,
      type: ProgressType.Linear
    })
      .width('80%')
      .height(8)

    Button('下一步')
      .onClick(() => {
        this.progress = Math.min(100, this.progress + 20);
      })
  }
}

这个示例演示了:“动态更新进度 + 线性显示”。每点一次按钮进度 +20。
这类写法在下载进度/请求流程页很常见。Gitee


2. 圆环进度用于状态展示(仪表盘/数据统计)

Progress({
  value: 75,
  type: ProgressType.Ring
})
  .width(120)
  .height(120)
  .style({ strokeWidth: 10 })

这种圆形显示常见于健康/计步统计、配速/任务完成情况等。也可配合数字居中显示:

Stack({ alignContent: Alignment.Center }) {
  Progress({ value: 75, type: ProgressType.Ring }).width(120).height(120).style({ strokeWidth: 10 })
  Text('75%').fontSize(18).fontWeight(FontWeight.Bold)
}

3. 半环/刻度环进度(视觉更复杂的进度)

Progress({
  value: 30,
  type: ProgressType.Eclipse
})
  .width(100)
  .height(100)

Progress({
  value: 50,
  type: ProgressType.ScaleRing
})
  .width(120)
  .height(120)
  .style({ strokeWidth: 15, scaleCount: 40, scaleWidth: 8 })

这种视觉更适合“健康、计量类” UI 设计。CSDN


六、要注意的细节(开发者常犯的坑) 1. total 不设默认是 100

如果你不传 total,SDK 默认认为总数是 100,所以 value=20 就是 20%。理解这一点能避免进度计算逻辑错误。Gitee


2. 类型支持可能跟系统版本有关

不同系统/SDK 版本对某些 type 的支持可能不同,比如刻度环效果在旧版本不支持。遇到渲染异常时建议查当前 SDK 的 API 参考页。CSDN


3. 圆形进度外层尺寸影响视觉效果

当你用 Ring/Eclipse 类型时,宽度和高度要一致才不会拉伸。建议写成 .width(120).height(120) 这种固定宽高搭配。CSDN


🏁 七、总结(像真实开发者写的重点)

说明
核心用途 展示明确的进度(还有多少没完成)
基础值 value / total 决定百分比
进度类型 线性/环形/半环/刻度环等
样式控制 可以自定义粗细、刻度等
常见搭配 文本 + 线性/圆环效果更清晰
posted @ 2025-12-22 08:54  想喝冰咖啡  阅读(2)  评论(0)    收藏  举报