• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# ProgressButtonV2
2
3
4文本下载按钮,可显示具体的下载进度。
5
6该组件基于[状态管理V2](../../../ui/state-management/arkts-state-management-overview.md#状态管理v2)实现,相较于[状态管理V1](../../../ui/state-management/arkts-state-management-overview.md#状态管理v1),状态管理V2增强了对数据对象的深度观察与管理能力,不再局限于组件层级。借助状态管理V2,开发者可以通过该组件更灵活地控制文本下载按钮的数据和状态,实现更高效的用户界面刷新。
7
8
9> **说明:**
10>
11> - 该组件从API Version 18开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
12>
13> - 该组件不支持在Wearable设备上使用。
14
15
16## 导入模块
17
18```
19import { ColorMetrics, LengthMetrics, ProgressButtonV2,  ProgressButtonV2Color } from '@kit.ArkUI'
20```
21
22## ProgressButtonV2
23
24ProgressButtonV2({progress: number, content: ResourceStr, progressButtonWidth?: LengthMetrics, onClicked: ClickCallback,
25isEnabled: boolean, colorOptions?: ProgressButtonColorOptions, progressButtonRadius?: LengthMetrics})
26
27文本下载按钮,可显示具体下载进度。
28
29**装饰器类型:**\@ComponentV2
30
31**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
32
33**系统能力:** SystemCapability.ArkUI.ArkUI.Full
34
35| 名称                                | 类型                                                            | 必填 | 装饰器类型                  | 说明                                                                                 |
36|-----------------------------------|---------------------------------------------------------------|----|------------------------|------------------------------------------------------------------------------------|
37| progress                          | number                                                        | 是  | \@Require <br/>\@Param | 下载按钮的当前进度值。<br/>取值范围:[0,100]。设置小于0的数值时置为0,设置大于100的数值置为100。<br/>默认值:0                                                                        |
38| content                           | [ResourceStr](ts-types.md#resourcestr)                        | 是  | \@Require <br/>\@Param | 下载按钮的文本。                                                                           |
39| progressButtonWidth               | [LengthMetrics](../js-apis-arkui-graphics.md#lengthmetrics12) | 否  | \@Param <br/>\@Once  | 下载按钮的宽度。<br/>默认值:44vp                                                             |
40| onClicked                         | [ClickCallback](#clickcallback)                               | 是  | \@Param                | 下载按钮的点击回调。<br/>默认值:() => {}。                                                       |
41| isEnabled                         | boolean                                                       | 是  | \@Param                | 下载按钮是否可以点击。<br> isEnabled为true时,表示可以点击。<br> isEnabled为false时,表示不可点击。<br/>默认值:true。 |
42| colorOptions                      | [ProgressButtonV2Color](#progressbuttonv2color)               | 否  | \@Param                | 下载按钮颜色选项。<br/>默认值:undefined。                                                       |
43| progressButtonRadius<sup>18+<sup> | [LengthMetrics](../js-apis-arkui-graphics.md#lengthmetrics12) | 否  | \@Param                | 下载按钮的圆角(不支持百分比设置)。<br/>取值范围:[0, height/2]<br/>默认值:height/2<br/>设置非法数值时,按照默认值处理。    |
44
45## 属性
46不支持[通用属性](ts-component-general-attributes.md)。
47
48## ClickCallback
49
50type ClickCallback = () => void
51
52下载按钮的点击回调。
53
54**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
55
56**系统能力:** SystemCapability.ArkUI.ArkUI.Full
57
58## ProgressButtonV2Color
59下载按钮颜色选项。
60
61**装饰器类型:**\@ObservedV2
62
63### 属性
64
65**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
66
67**系统能力:** SystemCapability.ArkUI.ArkUI.Full
68
69| 名称              | 类型           | 必填 | 装饰器类型   | 说明                        |
70|-----------------|--------------|----|---------|---------------------------|
71| progressColor   | [ColorMetrics](../js-apis-arkui-graphics.md#colormetrics12) | 否  | \@Trace | 进度条颜色。<br/>默认值:undefined  |
72| borderColor     | [ColorMetrics](../js-apis-arkui-graphics.md#colormetrics12) | 否  | \@Trace | 按钮描边颜色。<br/>默认值:undefined |
73| textColor       | [ColorMetrics](../js-apis-arkui-graphics.md#colormetrics12) | 否  | \@Trace | 按钮文本颜色。<br/>默认值:undefined |
74| backgroundColor | [ColorMetrics](../js-apis-arkui-graphics.md#colormetrics12) | 否  | \@Trace | 按钮背景颜色。<br/>默认值:undefined |
75
76### constructor
77constructor(options: ProgressButtonV2ColorOptions);
78
79下载按钮颜色选项构造函数。
80
81**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
82
83**系统能力:** SystemCapability.ArkUI.ArkUI.Full
84
85| 名称      | 类型                           | 必填 | 说明    |
86|---------|------------------------------|----|-------|
87| options | ProgressButtonV2ColorOptions | 是  | 色彩信息。 |
88
89## ProgressButtonV2ColorOptions
90
91下载按钮色彩信息选项。
92
93**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
94
95**系统能力:** SystemCapability.ArkUI.ArkUI.Full
96
97| 名称              | 类型           | 必填 | 说明                         |
98|-----------------|--------------|----|----------------------------|
99| progressColor   | ColorMetrics | 否  | 进度条颜色。<br/>默认值:undefined。  |
100| borderColor     | ColorMetrics | 否  | 按钮描边颜色。<br/>默认值:undefined。 |
101| textColor       | ColorMetrics | 否  | 按钮文本颜色。<br/>默认值:undefined。 |
102| backgroundColor | ColorMetrics | 否  | 按钮背景颜色。<br/>默认值:undefined。 |
103
104## 事件
105不支持[通用事件](ts-component-general-events.md)。
106
107## 示例
108
109该示例实现了一个简单的带加载进度的文本下载按钮。
110```ts
111import { ColorMetrics, LengthMetrics, ProgressButtonV2, ProgressButtonV2Color } from '@kit.ArkUI'
112
113@Entry
114@ComponentV2
115struct Index {
116  @Local progressIndex: number = 0;
117  @Local textState: string = '下载';
118  @Local ButtonWidth: LengthMetrics = LengthMetrics.vp(200);
119  @Local isRunning: boolean = false;
120  @Local enableState: boolean = true;
121
122  build() {
123    Column() {
124      Scroll() {
125        Column({ space: 20 }) {
126          ProgressButtonV2({
127            progress: this.progressIndex,
128            progressButtonWidth: this.ButtonWidth,
129            content: this.textState,
130            isEnabled: this.enableState,
131            onClicked: () => {
132              if (this.textState && !this.isRunning && this.progressIndex < 100) {
133                this.textState = '继续';
134              }
135              this.isRunning = !this.isRunning;
136              let timer = setInterval(() => {
137                if (this.isRunning) {
138                  if (this.progressIndex === 100) {
139
140                  } else {
141                    this.progressIndex++
142                    if (this.progressIndex === 100) {
143                      this.textState = '已完成';
144                      this.enableState = false;
145                    }
146                  }
147                } else {
148                  clearInterval(timer);
149                }
150              }, 20);
151            }
152          })
153        }.alignItems(HorizontalAlign.Center).width('100%').margin({ top: 20 });
154      }
155    }
156  }
157}
158```
159
160
161![img.png](./figures/img.png)