目录

Progress

The <Progress> component represents a progress indicator that displays the progress of content loading or an operation.

This component is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version.

Child Components

Not supported

APIs

Progress(options: ProgressOptions<Type>)

Creates a progress indicator.

Widget capability: This API can be used in ArkTS widgets since API version 9.

Atomic service API: This API can be used in atomic services since API version 11.

Parameters

Name Type Mandatory Description
options ProgressOptions<Type> Yes Parameters of the progress indicator.

ProgressOptions<Type>

Atomic service API: This API can be used in atomic services since API version 11.

Name Type Mandatory Description
value number Yes

Current progress. If the value is less than 0, the value 0 is used. If the value is greater than that of total, the value of total is used.

Default value: 0

Widget capability: This API can be used in ArkTS widgets since API version 9.

total number No

Total progress. If this parameter is set to a value less than or equal to 0, the value 100 is used.

Default value: 100

Widget capability: This API can be used in ArkTS widgets since API version 9.

type8+ ProgressType No

Style of the progress indicator.

Default value: ProgressType.Linear

Widget capability: This API can be used in ArkTS widgets since API version 9.

style(deprecated) ProgressStyle No

Style of the progress indicator.

This parameter is deprecated since API version 8. You are advised to use type instead.

Default value: ProgressStyle.Linear

ProgressType8+

Widget capability: This API can be used in ArkTS widgets since API version 9.

Atomic service API: This API can be used in atomic services since API version 11.

Name Description
Linear Linear style. Since API version 9, the progress indicator adaptively switches to vertical layout if the height is greater than the width.
Ring Indeterminate ring style. The ring fills up as the progress increases.
Eclipse Eclipse style, which visualizes the progress in a way similar to the moon waxing from new to full.
ScaleRing Determinate ring style, which is similar to the clock scale. Since API version 9, when the outer circles of scales overlap, the progress indicator is automatically converted to the Ring style.
Capsule Capsule style. At both ends, the progress indicator works in a same manner as the eclipse style. In the middle part of the capsule, the progress indicator works in a same manner as the linear style. If the height is greater than the width, the progress indicator adaptively switches to vertical layout.

ProgressStyle

Widget capability: This API can be used in ArkTS widgets since API version 9.

Atomic service API: This API can be used in atomic services since API version 11.

Name Description
Linear Linear style.
Ring8+ Indeterminate ring style. The ring fills up as the progress increases.
Eclipse Eclipse style, which visualizes the progress in a way similar to the moon waxing from new to full.
ScaleRing8+ Determinate ring style, which is similar to the clock scale.
Capsule8+ Capsule style. At both ends, the progress indicator works in a same manner as the eclipse style. In the middle part of the capsule, the progress indicator works in a same manner as the linear style. If the height is greater than the width, the progress indicator adaptively switches to vertical layout.

Attributes

In addition to the universal attributes, the following attributes are supported.

[h2]value

value(value: number)

Sets the current progress. If the value is less than 0, the value 0 is used. If the value is greater than that of total, the value of total is used. Invalid values do not take effect.

Widget capability: This API can be used in ArkTS widgets since API version 9.

Atomic service API: This API can be used in atomic services since API version 11.

System capability: SystemCapability.ArkUI.ArkUI.Full

Parameters

Name Type Mandatory Description
value number Yes

Current progress.

Default value: 0

[h2]color

color(value: ResourceColor | LinearGradient)

Sets the foreground color of the progress indicator.

LinearGradient is supported for the Ring type since API version 12.

Widget capability: This API can be used in ArkTS widgets since API version 9, except that LinearGradient is not supported.

Atomic service API: This API can be used in atomic services since API version 11.

System capability: SystemCapability.ArkUI.ArkUI.Full

Parameters

Name Type Mandatory Description
value ResourceColor | LinearGradient10+ Yes

Foreground color of the progress indicator.

Default value:

- Capsule:

API version 9 or earlier: '#ff007dff'

API version 10: '#33006cde'

API version 11 or later: '#33007dff'

- Ring:

API version 9 or earlier: '#ff007dff'

API version 10 or later: start: '#ff86c1ff', end: '#ff254ff7'

- Other styles: '#ff007dff'

[h2]backgroundColor

backgroundColor(value: ResourceColor)

Sets the background color of the progress indicator. The settings of the universal attribute backgroundColor applies to the background of the progress indicator instead of the entire <Progress> component.

Widget capability: This API can be used in ArkTS widgets since API version 9.

System capability: SystemCapability.ArkUI.ArkUI.Full

Parameters

Name Type Mandatory Description
value ResourceColor Yes

Background color of the progress indicator.

Default value:

- Capsule:

API version 9 or earlier: '#19182431'

API version 10 or later: '#33ffffff'

- Ring:

API version 9 or earlier: '#19182431'

API version 10: '#08182431'

API version 11 or later: '#0c182431'

- Other styles: '#19182431'

[h2]style8+

style(value: ProgressStyleOptions | CapsuleStyleOptions | RingStyleOptions | LinearStyleOptions | ScaleRingStyleOptions | EclipseStyleOptions)

Sets the component style.

Widget capability: This API can be used in ArkTS widgets since API version 9.

Atomic service API: This API can be used in atomic services since API version 11.

System capability: SystemCapability.ArkUI.ArkUI.Full

Parameters

Name Type Mandatory Description
value

ProgressStyleOptions8+ | CapsuleStyleOptions10+ |

RingStyleOptions10+ | LinearStyleOptions10+ |

ScaleRingStyleOptions10+ | EclipseStyleOptions10+

Yes

Component style.

- CapsuleStyleOptions: capsule style.

- RingStyleOptions: ring style.

- LinearStyleOptions: linear style.

- ScaleRingStyleOptions: determinate ring style.

- EclipseStyleOptions: eclipse style.

- ProgressStyleOptions: basic style.

ProgressStyleOptions does not support other parameter types currently.

[h2]contentModifier12+

contentModifier(modifier:ContentModifier<ProgressConfiguration>)

Creates a content modifier.

System capability: SystemCapability.ArkUI.ArkUI.Full

Parameters

Name Type Mandatory Description
modifier ContentModifier<ProgressConfiguration> Yes

Content modifier to apply to the current component.

modifier: content modifier. You need a custom class to implement the ContentModifier API.

[h2]privacySensitive12+

privacySensitive(isPrivacySensitiveMode: Optional<boolean>)

Sets whether to enable privacy mode.

System capability: SystemCapability.ArkUI.ArkUI.Full

Parameters

Name Type Mandatory Description
isPrivacySensitiveMode [Optional<boolean>] Yes

Whether to enable privacy mode, in which the progress is cleared and the text is obscured.

NOTE

If this parameter is set to null, privacy mode is disabled.

Enabling privacy mode requires widget framework support.

ProgressConfiguration12+

Name Type Description
value number Current progress.
total number Total progress.

ProgressStyleOptions8+

Atomic service API: This API can be used in atomic services since API version 11.

Name Type Mandatory Description
strokeWidth Length No

Stroke width of the progress indicator. It cannot be set in percentage.

Default value: 4.0vp

scaleCount number No

Number of divisions on the ring-style process indicator.

Default value: 120

scaleWidth Length No

Scale width of the ring-style progress bar. It cannot be set in percentage. If it is greater than the value of strokeWidth, the default scale width is used.

Default value: 2.0vp

enableSmoothEffect10+ boolean No

Whether to enable the smooth effect. When this effect is enabled, the progress change to the set value takes place gradually. Otherwise, it takes place immediately.

Default value: true

CapsuleStyleOptions10+

Atomic service API: This API can be used in atomic services since API version 11.

Name Type Mandatory Description
borderColor ResourceColor No

Border color.

Default value:

API version 10: '#33006cde'

API version 11 or later: '#33007dff'

borderWidth Length No

Border width. It cannot be set in percentage.

Default value: 1vp

content string No Text content, which can be customized .
font Font No

Text style.

Default value:

- Font size (cannot be set in percentage): 12fp

- Other attributes: following the settings of the <Text> component.

fontColor ResourceColor No

Font color.

Default value: '#ff182431'

enableScanEffect boolean No

Whether to enable the scan effect.

Default value: false

showDefaultPercentage boolean No

Whether to show the percentage of the current progress. This attribute does not take effect when the content attribute is set.

Default value: false

enableSmoothEffect boolean No

Whether to enable the smooth effect. When this effect is enabled, the progress change to the set value takes place gradually. Otherwise, it takes place immediately.

Default value: true

RingStyleOptions10+

Atomic service API: This API can be used in atomic services since API version 11.

Name Type Mandatory Description
strokeWidth Length No

Stroke width of the progress indicator. It cannot be set in percentage. A value greater than or equal to the radius evaluates to half of the radius.

Default value: 4.0vp

shadow boolean No

Whether to enable the shadow effect.

Default value: false

status ProgressStatus10+ No

Status of the progress indicator. When this parameter is set to LOADING, the check update animation is played, and the value settings do not take effect. When the value changes from LOADING to PROGRESSING, the check update animation stops when it has reached the end state.

Default value: ProgressStatus.PROGRESSING

enableScanEffect boolean No

Whether to enable the scan effect.

Default value: false

enableSmoothEffect boolean No

Whether to enable the smooth effect. When this effect is enabled, the progress change to the set value takes place gradually. Otherwise, it takes place immediately.

Default value: true

LinearStyleOptions10+

Atomic service API: This API can be used in atomic services since API version 11.

Name Type Mandatory Description
strokeWidth Length No

Stroke width of the progress indicator. It cannot be set in percentage.

Default value: 4.0vp

strokeRadius PX | VP | LPX | Resource No

Rounded corner radius of the progress indicator.

Value range: [0, strokeWidth/2] Default value: strokeWidth/2

enableScanEffect boolean No

Whether to enable the scan effect.

Default value: false

enableSmoothEffect boolean No

Whether to enable the smooth effect. When this effect is enabled, the progress change to the set value takes place gradually. Otherwise, it takes place immediately.

Default value: true

ScaleRingStyleOptions10+

Atomic service API: This API can be used in atomic services since API version 11.

Name Type Mandatory Description
strokeWidth Length No

Stroke width of the progress indicator. It cannot be set in percentage.

Default value: 4.0vp

scaleCount number No

Number of divisions on the ring-style process indicator.

Default value: 120

scaleWidth Length No

Scale width of the ring-style progress bar. It cannot be set in percentage. If it is greater than the value of strokeWidth, the default scale width is used.

Default value: 2.0vp

enableSmoothEffect boolean No

Whether to enable the smooth effect. When this effect is enabled, the progress change to the set value takes place gradually. Otherwise, it takes place immediately.

Default value: true

EclipseStyleOptions10+

Atomic service API: This API can be used in atomic services since API version 11.

Name Type Mandatory Description
enableSmoothEffect boolean No

Whether to enable the smooth effect. When this effect is enabled, the progress change to the set value takes place gradually. Otherwise, it takes place immediately.

Default value: true

ProgressStatus10+

Atomic service API: This API can be used in atomic services since API version 11.

Name Description
LOADING Loading.
PROGRESSING The progress is being updated.

Events

The universal events are supported.

Example

[h2]Example 1

This example shows the effect of the basic attributes for different types of progress indicators.

// xxx.ets
@Entry
@Component
struct ProgressExample {
  build() {
    Column({ space: 15 }) {
      Text('Linear Progress').fontSize(9).fontColor(0xCCCCCC).width('90%')
      Progress({ value: 10, type: ProgressType.Linear }).width(200)
      Progress({ value: 20, total: 150, type: ProgressType.Linear }).color(Color.Grey).value(50).width(200)


      Text('Eclipse Progress').fontSize(9).fontColor(0xCCCCCC).width('90%')
      Row({ space: 40 }) {
        Progress({ value: 10, type: ProgressType.Eclipse }).width(100)
        Progress({ value: 20, total: 150, type: ProgressType.Eclipse }).color(Color.Grey).value(50).width(100)
      }

      Text('ScaleRing Progress').fontSize(9).fontColor(0xCCCCCC).width('90%')
      Row({ space: 40 }) {
        Progress({ value: 10, type: ProgressType.ScaleRing }).width(100)
        Progress({ value: 20, total: 150, type: ProgressType.ScaleRing })
          .color(Color.Grey).value(50).width(100)
          .style({ strokeWidth: 15, scaleCount: 15, scaleWidth: 5 })
      }

      // scaleCount vs. scaleWidth
      Row({ space: 40 }) {
        Progress({ value: 20, total: 150, type: ProgressType.ScaleRing })
          .color(Color.Grey).value(50).width(100)
          .style({ strokeWidth: 20, scaleCount: 20, scaleWidth: 5 })
        Progress({ value: 20, total: 150, type: ProgressType.ScaleRing })
          .color(Color.Grey).value(50).width(100)
          .style({ strokeWidth: 20, scaleCount: 30, scaleWidth: 3 })
      }

      Text('Ring Progress').fontSize(9).fontColor(0xCCCCCC).width('90%')
      Row({ space: 40 }) {
        Progress({ value: 10, type: ProgressType.Ring }).width(100)
        Progress({ value: 20, total: 150, type: ProgressType.Ring })
          .color(Color.Grey).value(50).width(100)
          .style({ strokeWidth: 20 })
      }

      Text('Capsule Progress').fontSize(9).fontColor(0xCCCCCC).width('90%')
      Row({ space: 40 }) {
        Progress({ value: 10, type: ProgressType.Capsule }).width(100).height(50)
        Progress({ value: 20, total: 150, type: ProgressType.Capsule })
          .color(Color.Grey)
          .value(50)
          .width(100)
          .height(50)
      }
    }.width('100%').margin({ top: 30 })
  }
}

[h2]Example 2

This example shows the effect of visual attributes of the ring style progress indicator.

// xxx.ets
@Entry
@Component
struct ProgressExample {
  private gradientColor: LinearGradient = new LinearGradient([{ color: Color.Yellow, offset: 0.5 },
                                                              { color: Color.Orange, offset: 1.0 }])
  build() {
    Column({ space: 15 }) {
      Text('Gradient Color').fontSize(9).fontColor(0xCCCCCC).width('90%')
      Progress({ value: 70, total: 100, type: ProgressType.Ring })
        .width(100).style({ strokeWidth: 20 })
        .color(this.gradientColor)

      Text('Shadow').fontSize(9).fontColor(0xCCCCCC).width('90%')
      Progress({ value: 70, total: 100, type: ProgressType.Ring })
        .width(120).color(Color.Orange)
        .style({ strokeWidth: 20, shadow: true })
    }.width('100%').padding({ top: 5 })
  }
}

[h2]Example 3

This example shows the animation effect of the ring style progress indicator.

// xxx.ets
@Entry
@Component
struct ProgressExample {
  private gradientColor: LinearGradient = new LinearGradient([{ color: Color.Yellow, offset: 0.5 },
                                                              { color: Color.Orange, offset: 1.0 }])
  build() {
    Column({ space: 15 }) {
      Text('Loading Effect').fontSize(9).fontColor(0xCCCCCC).width('90%')
      Progress({ value: 0, total: 100, type: ProgressType.Ring })
        .width(100).color(Color.Blue)
        .style({ strokeWidth: 20, status: ProgressStatus.LOADING })

      Text('Scan Effect').fontSize(9).fontColor(0xCCCCCC).width('90%')
      Progress({ value: 30, total: 100, type: ProgressType.Ring })
        .width(100).color(Color.Orange)
        .style({ strokeWidth: 20, enableScanEffect: true })
    }.width('100%').padding({ top: 5 })
  }
}

[h2]Example 4

This example shows the effect of visual attributes of the capsule style progress indicator.

// xxx.ets
@Entry
@Component
struct ProgressExample {

  build() {
    Column({ space: 15 }) {
      Row({ space: 40 }) {
        Progress({ value: 100, total: 100,type: ProgressType.Capsule }).width(100).height(50)
          .style({borderColor: Color.Blue, borderWidth: 1, content: 'Installing...',
                  font: {size: 13, style: FontStyle.Normal}, fontColor: Color.Gray,
                  enableScanEffect: false, showDefaultPercentage: false})
      }
    }.width('100%').padding({ top: 5 })
  }
}

[h2]Example 5

This example shows the smooth effect.

// xxx.ets
@Entry
@Component
struct Index {
  @State value: number = 0

  build() {
    Column({space: 10}) {
      Text('enableSmoothEffect: true').fontSize(9).fontColor(0xCCCCCC).width('90%').margin(5)
        .margin({top: 20})
      Progress({value: this.value, total: 100, type:ProgressType.Linear})
        .style({strokeWidth: 10, enableSmoothEffect: true})

      Text('enableSmoothEffect: false').fontSize(9).fontColor(0xCCCCCC).width('90%').margin(5)
      Progress({value: this.value, total: 100, type:ProgressType.Linear})
        .style({strokeWidth: 10, enableSmoothEffect: false})

      Button('value +10').onClick(() => {
        this.value += 10
      })
        .width(75)
        .height(15)
        .fontSize(9)
    }
    .width('50%')
    .height('100%')
    .margin({left:20})
  }
}

[h2]Example 6

This example implements a custom progress indicator featuring a star-shaped design. The total progress is set to 3, and the current value can be incremented or decremented through buttons. The achieved progress is filled with a custom color.

// xxx.ets
class MyProgressModifier implements ContentModifier<ProgressConfiguration> {
  color: Color = Color.White


  constructor(color:Color) {
    this.color = color
  }
  applyContent() : WrappedBuilder<[ProgressConfiguration]>
  {
    return wrapBuilder(myProgress)
  }
}

@Builder function myProgress(config: ProgressConfiguration ) {

  Column({space:30}) {
    Text("Current progress: " + config.value + "/" + config.total).fontSize(20)
    Row() {
      Flex({ justifyContent: FlexAlign.SpaceBetween }) {
        Path()
          .width('30%')
          .height('30%')
          .commands('M108 0 L141 70 L218 78.3 L162 131 L175 205 L108 170 L41.2 205 L55 131 L1 78 L75 68 L108 0 Z')
          .fill(config.enabled && config.value >=1 ? (config.contentModifier as MyProgressModifier).color : Color.White)
          .stroke(Color.Black)
          .strokeWidth(3)
        Path()
          .width('30%')
          .height('30%')
          .commands('M108 0 L141 70 L218 78.3 L162 131 L175 205 L108 170 L41.2 205 L55 131 L1 78 L75 68 L108 0 Z')
          .fill(config.enabled && config.value >=2 ? (config.contentModifier as MyProgressModifier).color : Color.White)
          .stroke(Color.Black)
          .strokeWidth(3)
        Path()
          .width('30%')
          .height('30%')
          .commands('M108 0 L141 70 L218 78.3 L162 131 L175 205 L108 170 L41.2 205 L55 131 L1 78 L75 68 L108 0 Z')
          .fill(config.enabled && config.value >=3 ? (config.contentModifier as MyProgressModifier).color : Color.White)
          .stroke(Color.Black)
          .strokeWidth(3)
      }.width('100%')
    }
  }.margin({bottom:100})
}

@Entry
@Component
struct Index {
  @State currentValue: number = 0
  modifier = new MyProgressModifier(Color.Red)
  @State myModifier:(MyProgressModifier | undefined)  = this.modifier
  build() {
    Column() {
        Progress({ value: this.currentValue, total: 3, type: ProgressType.Ring}).contentModifier(this.modifier)
        Button('Progress++').onClick(()=>{
          if (this.currentValue < 3) {
            this.currentValue += 1
          }
        }).width('30%')
        Button('addProgress--').onClick(()=>{
          if (this.currentValue > 0) {
            this.currentValue -= 1
          }
        }).width('30%')
    }.width('100%').height('100%')
  }
}

[h2]Example 7

This example shows how to enable privacy mode, which requires widget framework support.

@Entry
@Component
struct ProgressExample {
  build() {
    Scroll() {
      Column({ space: 15 }) {
        Row() {
          Progress({ value: 50, total: 100, type: ProgressType.Capsule }).width(100).height(50)
            .style({
              borderColor: Color.Blue,
              borderWidth: 1,
              content: 'Installing...',
              font: { size: 13, style: FontStyle.Normal },
              fontColor: Color.Gray,
              enableScanEffect: false,
              showDefaultPercentage: true
            })
            .privacySensitive(true)
        }
      }
    }
  }
}