Slider
滑動條組件,通常用于快速調節設置值,如音量調節、亮度調節等應用場景。
說明:
開發前請熟悉鴻蒙開發指導文檔 :[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md
]
該組件從API Version 7開始支持。后續版本如有新增內容,則采用上角標單獨標記該內容的起始版本。
子組件
無
接口
Slider(options?: {value?: number, min?: number, max?: number, step?: number, style?: SliderStyle, direction?: Axis, reverse?: boolean})
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數:
參數名 | 參數類型 | 必填 | 參數描述 |
---|---|---|---|
value | number | 否 | 當前進度值。 默認值:參數min 從API version 10開始,該參數支持[$$]雙向綁定變量。 |
min | number | 否 | 設置最小值。 默認值:0 |
max | number | 否 | 設置最大值。 默認值:100**說明:**min >= max異常情況,min取默認值0,max取默認值100。 value不在[min, max]范圍之內,取min/max,靠近min取min,靠近max取max。 |
step | number | 否 | 設置Slider滑動步長。 默認值:1 取值范圍:[0.01, max]**說明:**設置小于0或百分比的值時,按默認值顯示。 |
style | [SliderStyle] | 否 | 設置Slider的滑塊與滑軌顯示樣式。 默認值:SliderStyle.OutSet |
direction8+ | [Axis] | 否 | 設置滑動條滑動方向為水平或豎直方向。 默認值:Axis.Horizontal |
reverse8+ | boolean | 否 | 設置滑動條取值范圍是否反向,橫向Slider默認為從左往右滑動,豎向Slider默認為從上往下滑動。 默認值:false |
SliderStyle枚舉說明
從API version 9開始,該接口支持在ArkTS卡片中使用。
名稱 | 描述 |
---|---|
OutSet | 滑塊在滑軌上。 |
InSet | 滑塊在滑軌內。 |
屬性
支持除觸摸熱區以外的通用屬性設置。
名稱 | 參數類型 | 描述 |
---|---|---|
blockColor | [ResourceColor] | 設置滑塊的顏色。 從API version 9開始,該接口支持在ArkTS卡片中使用。**說明:**當滑塊形狀設置為SliderBlockType.DEFAULT 時,blockColor 可設置默認圓形滑塊顏色; 當滑塊形狀設置為SliderBlockType.IMAGE 時,滑塊無填充,設置blockColor 不生效; 當滑塊形狀設置為SliderBlockType.SHAPE 時,blockColor 可設置自定義形狀的填充顏色。 |
trackColor | [ResourceColor] | 設置滑軌的背景顏色。 從API version 9開始,該接口支持在ArkTS卡片中使用。 |
selectedColor | [ResourceColor] | 設置滑軌的已滑動部分顏色。 從API version 9開始,該接口支持在ArkTS卡片中使用。 |
showSteps | boolean | 設置當前是否顯示步長刻度值。 默認值:false 從API version 9開始,該接口支持在ArkTS卡片中使用。 |
showTips | value: boolean, content10+?: [ResourceStr] | value:設置滑動時是否顯示氣泡提示。 默認值:false content:設置氣泡提示的文本內容,默認顯示當前百分比。 從API version 9開始,該接口支持在ArkTS卡片中使用。**說明:**當direction的值為Axis.Horizontal時,tip顯示在滑塊正上方。值為Axis.Vertical時,tip顯示在滑塊正左邊。 tip的繪制區域為Slider自身節點的overlay。 Slider不設置邊距或者邊距比較小時,tip會被截斷。 |
trackThickness | [Length] | 設置滑軌的粗細。 默認值:當參數style的值設置[SliderStyle].OutSet 時為 4.0vp,[SliderStyle].InSet時為20.0vp 從APIversion9開始,該接口支持在ArkTS卡片中使用。**說明:**設置為小于等于0的值時,按默認值顯示。 |
blockBorderColor10+ | [ResourceColor] | 設置滑塊描邊顏色。**說明:**當滑塊形狀設置為SliderBlockType.DEFAULT 時,blockBorderColor 可設置默認圓形滑塊描邊顏色; 當滑塊形狀設置為SliderBlockType.IMAGE 時,滑塊無描邊,設置blockBorderColor 不生效; 當滑塊形狀設置為SliderBlockType.SHAPE 時,blockBorderColor 可設置自定義形狀中線的顏色。 |
blockBorderWidth10+ | [Length] | 設置滑塊描邊粗細。**說明:**當滑塊形狀設置為SliderBlockType.DEFAULT 時,blockBorderWidth 可設置默認圓形滑塊描邊粗細; 當滑塊形狀設置為SliderBlockType.IMAGE 時,滑塊無描邊,設置blockBorderWidth 不生效; 當滑塊形狀設置為SliderBlockType.SHAPE 時,blockBorderWidth 可設置自定義形狀中線的粗細。 |
stepColor10+ | [ResourceColor] | 設置刻度顏色。 |
trackBorderRadius10+ | [Length] | 設置底板圓角半徑。 |
blockSize10+ | [SizeOptions] | 設置滑塊大小。 |
blockStyle10+ | [SliderBlockStyle] | 設置滑塊形狀參數。 |
stepSize10+ | [Length] | 設置刻度大小(直徑)。 |
SliderBlockStyle10+對象說明
Slider組件滑塊形狀參數。
名稱 | 類型 | 必填 | 說明 |
---|---|---|---|
type | [SliderBlockType] | 是 | 設置滑塊形狀。 默認值:SliderBlockType.DEFAULT,使用圓形滑塊。 |
image | [ResourceStr] | 否 | 設置滑塊圖片資源。 圖片顯示區域大小由blockSize屬性控制,請勿輸入尺寸過大的圖片。 |
shape | [Circle] | [Ellipse] | [Path] |
SliderBlockType10+枚舉說明
Slider組件滑塊形狀枚舉。
名稱 | 描述 |
---|---|
DEFAULT | 使用默認滑塊(圓形)。 |
IMAGE | 使用圖片資源作為滑塊。 |
SHAPE | 使用自定義形狀作為滑塊。 |
事件
支持[通用事件]外,還支持以下事件:
名稱 | 功能描述 |
---|---|
onChange(callback: (value: number, mode: SliderChangeMode) => void) | Slider拖動或點擊時觸發事件回調。 value:當前滑動進度值。若返回值有小數,可使用number.toFixed()方法將數據處理為預期的精度。 mode:事件觸發的相關狀態值。 從API version 9開始,該接口支持在ArkTS卡片中使用。**說明:**Begin和End狀態當手勢點擊時都會觸發,Moving和Click狀態當value值發生變化時觸發。 當連貫動作為拖動動作時,不觸發Click狀態。 value值的變化范圍為對應步長steps數組。 |
SliderChangeMode枚舉說明
從API version 9開始,該接口支持在ArkTS卡片中使用。
名稱 | 值 | 描述 |
---|---|---|
Begin | 0 | 手勢/鼠標接觸或者按下滑塊。 |
Moving | 1 | 正在拖動滑塊過程中。 |
End | 2 | 手勢/鼠標離開滑塊。 |
Click | 3 | 點擊滑動條使滑塊位置移動。HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿 |
示例
示例1
// xxx.ets
@Entry
@Component
struct SliderExample {
@State outSetValueOne: number = 40
@State inSetValueOne: number = 40
@State outSetValueTwo: number = 40
@State inSetValueTwo: number = 40
@State vOutSetValueOne: number = 40
@State vInSetValueOne: number = 40
@State vOutSetValueTwo: number = 40
@State vInSetValueTwo: number = 40
build() {
Column({ space: 8 }) {
Text('outset slider').fontSize(9).fontColor(0xCCCCCC).width('90%').margin(15)
Row() {
Slider({
value: this.outSetValueOne,
min: 0,
max: 100,
style: SliderStyle.OutSet
})
.showTips(true)
.onChange((value: number, mode: SliderChangeMode) = > {
this.outSetValueOne = value
console.info('value:' + value + 'mode:' + mode.toString())
})
// toFixed(0)將滑動條返回值處理為整數精度
Text(this.outSetValueOne.toFixed(0)).fontSize(12)
}
.width('80%')
Row() {
Slider({
value: this.outSetValueTwo,
step: 10,
style: SliderStyle.OutSet
})
.showSteps(true)
.onChange((value: number, mode: SliderChangeMode) = > {
this.outSetValueTwo = value
console.info('value:' + value + 'mode:' + mode.toString())
})
Text(this.outSetValueTwo.toFixed(0)).fontSize(12)
}
.width('80%')
Text('inset slider').fontSize(9).fontColor(0xCCCCCC).width('90%').margin(15)
Row() {
Slider({
value: this.inSetValueOne,
min: 0,
max: 100,
style: SliderStyle.InSet
})
.blockColor('#191970')
.trackColor('#ADD8E6')
.selectedColor('#4169E1')
.showTips(true)
.onChange((value: number, mode: SliderChangeMode) = > {
this.inSetValueOne = value
console.info('value:' + value + 'mode:' + mode.toString())
})
Text(this.inSetValueOne.toFixed(0)).fontSize(12)
}
.width('80%')
Row() {
Slider({
value: this.inSetValueTwo,
step: 10,
style: SliderStyle.InSet
})
.blockColor('#191970')
.trackColor('#ADD8E6')
.selectedColor('#4169E1')
.showSteps(true)
.onChange((value: number, mode: SliderChangeMode) = > {
this.inSetValueTwo = value
console.info('value:' + value + 'mode:' + mode.toString())
})
Text(this.inSetValueTwo.toFixed(0)).fontSize(12)
}
.width('80%')
Row() {
Column() {
Text('vertical outset slider').fontSize(9).fontColor(0xCCCCCC).width('50%').margin(15)
Row() {
Slider({
value: this.vOutSetValueOne,
style: SliderStyle.OutSet,
direction: Axis.Vertical
})
.blockColor('#191970')
.trackColor('#ADD8E6')
.selectedColor('#4169E1')
.showTips(true)
.onChange((value: number, mode: SliderChangeMode) = > {
this.vOutSetValueOne = value
console.info('value:' + value + 'mode:' + mode.toString())
})
Slider({
value: this.vOutSetValueTwo,
step: 10,
style: SliderStyle.OutSet,
direction: Axis.Vertical
})
.blockColor('#191970')
.trackColor('#ADD8E6')
.selectedColor('#4169E1')
.showSteps(true)
.onChange((value: number, mode: SliderChangeMode) = > {
this.vOutSetValueTwo = value
console.info('value:' + value + 'mode:' + mode.toString())
})
}
}.width('50%').height(300)
Column() {
Text('vertical inset slider').fontSize(9).fontColor(0xCCCCCC).width('50%').margin(15)
Row() {
Slider({
value: this.vInSetValueOne,
style: SliderStyle.InSet,
direction: Axis.Vertical,
reverse: true // 豎向的Slider默認是上端是min值,下端是max值,因此想要從下往上滑動,需要設置reverse為true
})
.showTips(true)
.onChange((value: number, mode: SliderChangeMode) = > {
this.vInSetValueOne = value
console.info('value:' + value + 'mode:' + mode.toString())
})
Slider({
value: this.vInSetValueTwo,
step: 10,
style: SliderStyle.InSet,
direction: Axis.Vertical,
reverse: true
})
.showSteps(true)
.onChange((value: number, mode: SliderChangeMode) = > {
this.vInSetValueTwo = value
console.info('value:' + value + 'mode:' + mode.toString())
})
}
}.width('50%').height(300)
}
}.width('100%')
}
}
示例2
@Entry
@Component
struct SliderExample {
@State tipsValue: number = 40
build() {
Column({ space: 8 }) {
Text('block').fontSize(9).fontColor(0xCCCCCC).margin(15).width('90%')
Slider({ style: SliderStyle.OutSet, value: 40 })
.blockSize({ width: 40, height: 40 })
.blockBorderColor(Color.Red)
.blockBorderWidth(5)
Divider()
Text('step').fontSize(9).fontColor(0xCCCCCC).margin(15).width('90%')
Slider({ style: SliderStyle.InSet, value: 40, step: 10 })
.showSteps(true)
.stepSize(8)
.stepColor(Color.Yellow)
Divider()
Text('track').fontSize(9).fontColor(0xCCCCCC).margin(15).width('90%')
Slider({ style: SliderStyle.InSet, value: 40 })
.trackBorderRadius(2)
Divider()
Text('blockStyle').fontSize(9).fontColor(0xCCCCCC).margin(15).width('90%')
Slider({ style: SliderStyle.OutSet, value: 40 })
.blockStyle({ type: SliderBlockType.DEFAULT })
Slider({ style: SliderStyle.OutSet, value: 40 })
.blockStyle({ type: SliderBlockType.IMAGE, image: $r('sys.media.ohos_app_icon') })
Slider({ style: SliderStyle.OutSet, value: 40 })
.blockSize({ width: '60px', height: '60px' })
.blockColor(Color.Red)
.blockStyle({ type: SliderBlockType.SHAPE, shape: new Path({ commands: 'M60 60 M30 30 L15 56 L45 56 Z' }) })
Divider()
Text('tips').fontSize(9).fontColor(0xCCCCCC).margin(15).width('90%')
Slider({ style: SliderStyle.InSet, value: this.tipsValue })
.showTips(true, 'value:' + this.tipsValue.toFixed())
.onChange(value = > {
this.tipsValue = value
})
}
}
}
審核編輯 黃宇
-
組件
+關注
關注
1文章
505瀏覽量
17807 -
鴻蒙
+關注
關注
57文章
2321瀏覽量
42749
發布評論請先 登錄
相關推薦
評論