首页 > 编程笔记 > 通用技能 阅读:2

ArkUI Progress进度条组件用法详解(附带实例)

Progress 是一种进度条显示组件,用于显示目标操作的当前进度。

ArkUI创建进度条

Progress 通过调用接口来创建,接口调用形式如下:
Progress(options: {value: number, total?: number, type?: ProgressType})
其中,value 用于设置初始进度值,total 用于设置进度总长度,type 用于设置 Progress 样式。

创建进度条的示例代码如下:
@Entry
@Component
struct ProgressSample {
    build() {
        Row() {
            // 创建一个进度总长为100,初始进度值为24的线性进度条
            Progress({ value: 24, total: 100, type: ProgressType.Linear })
        }.margin({ left: 20, right: 20 })
    }
}
显示效果如下图所示:


图 1 进度条显示效果

ArkUI设置进度条样式

通过 ProgressType 可以设置进度条样式,ProgressType 类型包括:
默认类型为 ProgressType.Linear。

从 API version9 开始,当组件的高度大于宽度时,组件会自适应垂直显示;当组件的高度等于宽度时,组件保持水平显示。

1) 线性样式进度条的示例代码如下:
@Entry
@Component
struct ProgressSample {
    build() {
        Row() {
            // 进度条组件,设置当前进度值为20,总进度长度为100,将进度条样式设置为直线
            // 设置进度条的宽度大于高度,进度条水平显示
            Progress({ value: 20, total: 100, type: ProgressType.Linear }).width(200).height(50)
            // 进度条组件,设置当前进度值为20,总进度长度为100,将进度条样式设置为直线
            // 设置进度条的高度大于宽度,进度条垂直显示
            Progress({ value: 20, total: 100, type: ProgressType.Linear }).width(50).height(200)
        }.width('100%').padding({ left: 20, right: 20 })
    }
}
显示效果如下图所示:


图 2 直线样式进度条显示效果

2) 环形无刻度样式进度条的示例代码如下:
@Entry
@Component
struct ProgressSample {
    build() {
        Row() {
            // 从左往右,1号环形进度条,默认前景色为蓝色渐变,默认strokeWidth进度条宽度为2vp
            Progress({ value: 40, total: 150, type: ProgressType.Ring }).width(100).height(100)
            // 从左往右,2号环形进度条
            Progress({ value: 40, total: 150, type: ProgressType.Ring }).width(100).height(100)
                // 进度条前景色为灰色
                .color(Color.Grey)
                // 设置strokeWidth进度条宽度为15vp
                .style({ strokeWidth: 15})
        }
    }
}
显示效果如下图所示:


图 3 环形无刻度样式进度条显示效果

3) 环形有刻度样式进度条的示例代码如下:
@Entry
@Component
struct ProgressSample {
    build() {
        Row() {
            Progress({ value: 20, total: 150, type: ProgressType.ScaleRing }).width(100).height(100)
                .backgroundColor(Color.Black)
                // 设置环形有刻度进度条总刻度数为 20,刻度宽度为 5vp
                .style({ scaleCount: 20, scaleWidth: 5 })
            Progress({ value: 20, total: 150, type: ProgressType.ScaleRing }).width(100).height(100)
                .backgroundColor(Color.Black)
                // 设置环形有刻度进度条宽度为 15vp,总刻度数为 20,刻度宽度为 5vp
                .style({ strokeWidth: 15, scaleCount: 20, scaleWidth: 5 })
            Progress({ value: 20, total: 150, type: ProgressType.ScaleRing }).width(100).height(100)
                .backgroundColor(Color.Black)
                // 设置环形有刻度进度条宽度为 15vp,总刻度数为 20,刻度宽度为 3vp
                .style({ strokeWidth: 15, scaleCount: 20, scaleWidth: 3 })
        }.width('100%').justifyContent(FlexAlign.SpaceEvenly)
    }
}
显示效果如下图所示:


图 4 环形有刻度样式进度条显示效果

4) 圆形样式进度条的示例代码如下:
@Entry
@Component
struct ProgressSample {
    build() {
        Row() {
            // 圆形进度条,默认前景色为蓝色
            Progress({ value: 10, total: 150, type: ProgressType.Eclipse })
                .width(100).height(100)
            // 圆形进度条,指定前景色为灰色
            Progress({ value: 20, total: 150, type: ProgressType.Eclipse })
                .color(Color.Grey).width(100).height(100)
        }.width('100%').justifyContent(FlexAlign.SpaceEvenly)
    }
}
显示效果如下图所示:


图 5 圆形样式进度条显示效果

5) 胶囊样式进度条的示例代码如下:
@Entry
@Component
struct ProgressSample {
    build() {
        Row() {
            Progress({ value: 10, total: 150, type: ProgressType.Capsule })
                .width(100).height(50)
            Progress({ value: 20, total: 150, type: ProgressType.Capsule })
                .width(50).height(100).color(Color.Grey)
            Progress({ value: 50, total: 150, type: ProgressType.Capsule })
                .width(50).height(100).color(Color.Blue).backgroundColor(Color.Black)
        }.width('100%').justifyContent(FlexAlign.SpaceEvenly)
    }
}
显示效果如下图所示:


图 6 胶囊样式进度条显示效果

ArkUI Progress场景示例

下面实例中,实现通过点击按钮更新进度条的值,同时刷新进度条显示效果。该场景一般多用于文件的下载、上传或应用程序的安装。
@Entry
@Component
struct ProgressCase1 {
    @State progressValue: number = 0

    // 设置进度条初始值为 0
    build() {
        Column() {
            Column() {
                Progress({ value: 0, total: 100, type: ProgressType.Capsule })
                    .width(200).height(50).value(this.progressValue)
                Row().width('100%').height(5)
                Button("进度条+5")
                .onClick(() => {
                    this.progressValue += 5
                    if (this.progressValue > 100) {
                        this.progressValue = 0
                    }
                })
            }
        }.width('100%').height('100%')
    }
}
显示效果如下图所示:


图 7 点击按钮更新进度条值的显示效果

相关文章