鴻蒙應(yīng)用開發(fā)從入門到實戰(zhàn)(十三):ArkUI組件Slider&Progress
大家好,我是潘Sir,持續(xù)分享IT技術(shù),幫你少走彎路。《鴻蒙應(yīng)用開發(fā)從入門到項目實戰(zhàn)》系列文章持續(xù)更新中,陸續(xù)更新AI+編程、企業(yè)級項目實戰(zhàn)等原創(chuàng)內(nèi)容、歡迎關(guān)注!
ArkUI提供了豐富的系統(tǒng)組件,用于制作鴻蒙原生應(yīng)用APP的UI,本文主要講解滑塊Slider和進(jìn)度條Progress組件的使用。
一、滑塊Slider
1.1 概述
滑動條組件,通常用于快速調(diào)節(jié)設(shè)置值,如音量調(diào)節(jié)、亮度調(diào)節(jié)等應(yīng)用場景。
1.2 參數(shù)
Slider組件的參數(shù)定義如下
Slider(options?: {value?: number, min?: number, max?: number, step?: number, style?: SliderStyle, direction?: Axis, reverse?: boolean})
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù)說明:
| 參數(shù)名 | 參數(shù)類型 | 必填 | 參數(shù)描述 |
|---|---|---|---|
| value | number | 否 | 當(dāng)前進(jìn)度值。默認(rèn)值:0 |
| min | number | 否 | 設(shè)置最小值。默認(rèn)值:0 |
| max | number | 否 | 設(shè)置最大值。默認(rèn)值:100說明:min >= max異常情況,min取默認(rèn)值0,max取默認(rèn)值100。value不在[min, max]范圍之內(nèi),取min/max,靠近min取min,靠近max取max。 |
| step | number | 否 | 設(shè)置Slider滑動步長。默認(rèn)值:1取值范圍:[0.01, max]說明:設(shè)置小于0或百分比的值時,按默認(rèn)值顯示。 |
| style | SliderStyle | 否 | 設(shè)置Slider的滑塊與滑軌顯示樣式。默認(rèn)值:SliderStyle.OutSet |
| direction | Axis | 否 | 設(shè)置滑動條滑動方向為水平或豎直方向。默認(rèn)值:Axis.Horizontal |
| reverse | boolean | 否 | 設(shè)置滑動條取值范圍是否反向,橫向Slider默認(rèn)為從左往右滑動,豎向Slider默認(rèn)為從上往下滑動。默認(rèn)值:false |
SliderStyle枚舉說明
| 名稱 | 描述 |
|---|---|
| OutSet | 滑塊在滑軌上。 |
| InSet | 滑塊在滑軌內(nèi)。 |
1.3 常用屬性
支持除觸摸熱區(qū)以外的通用屬性設(shè)置。
| 名稱 | 參數(shù)類型 | 描述 |
|---|---|---|
| blockColor | ResourceColor | 設(shè)置滑塊的顏色。從API version 9開始,該接口支持在ArkTS卡片中使用。 |
| trackColor | ResourceColor | 設(shè)置滑軌的背景顏色。從API version 9開始,該接口支持在ArkTS卡片中使用。 |
| selectedColor | ResourceColor | 設(shè)置滑軌的已滑動部分顏色。從API version 9開始,該接口支持在ArkTS卡片中使用。 |
| showSteps | boolean | 設(shè)置當(dāng)前是否顯示步長刻度值。默認(rèn)值:false從API version 9開始,該接口支持在ArkTS卡片中使用。 |
| showTips | boolean | 設(shè)置滑動時是否顯示百分比氣泡提示。默認(rèn)值:false從API version 9開始,該接口支持在ArkTS卡片中使用。說明:當(dāng)direction的屬性值為Axis.Horizontal時,tip顯示在滑塊正上方。值為Axis.Vertical時,tip顯示在滑塊正左邊。tip的繪制區(qū)域為Slider自身節(jié)點的overlay。Slider不設(shè)置邊距,或者邊距比較小時,tip會被截斷。 |
| trackThickness | Length | 設(shè)置滑軌的粗細(xì)。默認(rèn)值:當(dāng)參數(shù)style的值設(shè)置SliderStyle.OutSet 時為 4.0vp,SliderStyle.InSet時為20.0vp。從APIversion9開始,該接口支持在ArkTS卡片中使用。說明:設(shè)置為小于0的值時,按默認(rèn)值顯示。 |
1.4 事件
通用事件僅支持掛載卸載事件:OnAppear,OnDisAppear。
| 名稱 | 功能描述 |
|---|---|
| onChange(callback: (value: number, mode: SliderChangeMode) => void) | Slider滑動時觸發(fā)事件回調(diào)。value:當(dāng)前滑動進(jìn)度值。若返回值有小數(shù),可使用number.toFixed()方法將數(shù)據(jù)處理為預(yù)期的精度。mode:拖動狀態(tài)。從API version 9開始,該接口支持在ArkTS卡片中使用。說明:Begin和End狀態(tài)當(dāng)手勢點擊時都會觸發(fā),Moving和Click狀態(tài)當(dāng)value值發(fā)生變換時觸發(fā)。當(dāng)連貫動作為拖動動作時,不觸發(fā)Click狀態(tài)。value值的變化范圍為對應(yīng)步長steps數(shù)組。 |
SliderChangeMode枚舉說明
| 名稱 | 值 | 描述 |
|---|---|---|
| Begin | 0 | 手勢/鼠標(biāo)接觸或者按下滑塊。 |
| Moving | 1 | 正在拖動滑塊過程中。 |
| End | 2 | 手勢/鼠標(biāo)離開滑塊。 |
| Click | 3 | 點擊滑動條使滑塊位置移動。 |
1.5 案例
component目錄下新建slider目錄,新建SliderPage.ets文件
@Entry
@Component
struct SliderPage {
@State imgWidth: number = 10
build() {
Column({ space: 150 }) {
Slider({
min: 100,
max: 300,
value: this.imgWidth,
step: 10,
})
.width('90%')
.blockColor('#36D')
.trackThickness(5)
.showTips(true)
.onChange((value,mode)=>{
console.log(value.toString());
console.log(mode.toString());
})
}
.width('100%')
.height('100%')
.justifyContent(FlexAlign.Center)
}
}
二、進(jìn)度條Progress
2.1 概述
Progress為進(jìn)度條組件,用于顯示各種進(jìn)度。
2.2 參數(shù)
Progress組件的參數(shù)定義如下
Progress(options: {value: number, total?: number, type?: ProgressType})
- value
value屬性用于設(shè)置當(dāng)前進(jìn)度值。
- total
total屬性用于設(shè)置總值。
- type
type屬性用于設(shè)置進(jìn)度條類型,可通過ProgressType枚舉類型進(jìn)行設(shè)置,可選的枚舉值如下
| 名稱 | 描述 | 效果 |
|---|---|---|
ProgressType.Linear |
線性樣式 | ![]() |
ProgressType.Ring |
環(huán)形無刻度樣式 | ![]() |
ProgressType.Eclipse |
月食樣式 | ![]() |
ProgressType.ScaleRing |
環(huán)形有刻度樣式 | ![]() |
ProgressType.Capsule |
膠囊樣式 | ![]() |
示例代碼:
component目錄下新建progress目錄,新建ProgressParameter.ets文件
@Entry
@Component
struct ProgressParameter {
@State value: number = 30;
@State total: number = 100;
build() {
Column({ space: 50 }) {
Progress({ value: this.value, total: this.total, type: ProgressType.Linear })
Progress({ value: this.value, total: this.total, type: ProgressType.Ring })
Progress({ value: this.value, total: this.total, type: ProgressType.Eclipse })
Progress({ value: this.value, total: this.total, type: ProgressType.ScaleRing })
Progress({ value: this.value, total: this.total, type: ProgressType.Capsule })
.width(50)
.height(200)
//分隔線
Divider()
Row({ space: 50 }) {
Button('進(jìn)度-1')
.onClick(() => {
if (this.value > 0) {
this.value--;
}
})
Button('進(jìn)度+1')
.onClick(() => {
if (this.value < this.total) {
this.value++;
}
})
}
}.width('100%')
.height('100%')
.justifyContent(FlexAlign.Center)
}
}
2.3 常用屬性
2.3.1 進(jìn)度條樣式
可通過style()調(diào)整進(jìn)度條的樣式,例如進(jìn)度條的寬度,該方法的參數(shù)類型定義如下
style({strokeWidth?: string|number|Resource,scaleCount?: number,scaleWidth?: string|number|Resource})
- strokeWidth
strokeWidth屬性用于設(shè)置進(jìn)度條的寬度,默認(rèn)值為4vp。該屬性可用于Linear、Ring、ScaleRing三種類型,效果如下

- scaleCount
scaleCount屬性用于設(shè)置ScaleRing的刻度數(shù),默認(rèn)值為120。效果如下

- scaleWidth
scaleCount屬性用于設(shè)置ScaleRing的刻度線的寬度,默認(rèn)值為2vp。效果如下

示例代碼:
在progress目錄下新建ProgressAttributePage.ets文件
@Entry
@Component
// 進(jìn)度條progress樣式 style()
struct ProgressAttributePage {
build() {
Column({ space: 50 }) {
// strokeWidth屬性用于設(shè)置進(jìn)度條的寬度,默認(rèn)值為4vp
// scaleCount屬性用于設(shè)置ScaleRing的刻度數(shù),默認(rèn)值為120
// scaleCount屬性用于設(shè)置ScaleRing的刻度線的寬度,默認(rèn)值為2vp
Progress({ value: 30, total: 100, type: ProgressType.Linear })
.style({
strokeWidth: 20
})
Progress({ value: 30, total: 100, type: ProgressType.Ring })
.style({
strokeWidth: 20
})
Progress({ value: 30, total: 100, type: ProgressType.ScaleRing })
.style({
strokeWidth: 10,
scaleWidth: 3,
scaleCount: 30
})
}.width('100%')
.height('100%')
.justifyContent(FlexAlign.Center)
}
}
2.3.2 進(jìn)度條顏色
進(jìn)度條的顏色可通過color()和backgroundColor()方法進(jìn)行設(shè)置,其中color()用于設(shè)置前景色,backgroundColor()用于設(shè)置背景色,例如

示例代碼:
在progress目錄下新建ProgressColor.ets文件
@Entry
@Component
// 進(jìn)度條progress顏色
struct ProgressColor {
build() {
Column({ space: 50 }) {
// 進(jìn)度條的顏色可通過color()和backgroundColor()方法進(jìn)行設(shè)置,
// 其中color()用于設(shè)置前景色,backgroundColor()用于設(shè)置背景色
Progress({ value: 30, total: 100, type: ProgressType.Linear })
.color(Color.Green)
.backgroundColor("#26008000")
Progress({ value: 30, total: 100, type: ProgressType.Ring })
.color(Color.Green)
.backgroundColor("#26008000")
Progress({ value: 30, total: 100, type: ProgressType.Eclipse })
.color(Color.Green)
.backgroundColor("#26008000")
Progress({ value: 30, total: 100, type: ProgressType.ScaleRing })
.color(Color.Green)
.backgroundColor("#26008000")
Progress({ value: 30, total: 100, type: ProgressType.Capsule })
.width(200)
.color(Color.Green)
.backgroundColor("#26008000")
}.width('100%')
.height('100%')
.justifyContent(FlexAlign.Center)
}
}
《鴻蒙應(yīng)用開發(fā)從入門到項目實戰(zhàn)》系列文章持續(xù)更新中,陸續(xù)更新AI+編程、企業(yè)級項目實戰(zhàn)等原創(chuàng)內(nèi)容,防止迷路,歡迎關(guān)注!
作者:黑馬騰云
微信公眾賬號:自學(xué)幫
博客園:黑馬騰云博客
如果你想及時得到個人撰寫文章以及著作的消息推送,或者想看看個人推薦的技術(shù)資料,可以掃描左邊二維碼(或者長按識別二維碼)關(guān)注微信公眾號)。
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。





浙公網(wǎng)安備 33010602011771號