Jetpack Compose 更改滑块拇指大小
Jetpack Compose Change Slider Thumb Size
有什么方法可以改变滑块拇指的大小吗?我想现在我们只能操纵颜色
var sliderPosition by remember { mutableStateOf(0f) }
Text(text = sliderPosition.toString())
Slider(
value = sliderPosition,
onValueChange = { sliderPosition = it },
valueRange = 0f..100f,
onValueChangeFinished = {
// launch some business logic update with the state you hold
// viewModel.updateSelectedSliderValue(sliderPosition)
},
steps = 5,
colors = SliderDefaults.colors(
thumbColor = MaterialTheme.colors.secondary,
activeTrackColor = MaterialTheme.colors.secondary
)
)
不,这个尺寸不能修改。您唯一可以做的就是将整个 Slider.kt 文件复制到您的项目中并进行修改。
最好给新视图起一个不同的名字,以避免将来产生误解。
您应该更改 ThumbRadius
常量,或者如果您的应用程序需要不同的大小,则将其设为变量。
我创建了一个库来轻松自定义 Slider,因为 Material 包中的 Slider 不灵活。
https://github.com/krottv/compose-sliders。下面是如何使用它来缩小拇指大小的代码示例:
var stateSlider by remember { mutableStateOf(0.5f) }
SliderValueHorizontal(
stateSlider, { stateSlider = it },
modifier = Modifier
.fillMaxWidth(),
// desired size of Slider's thumb
thumbSize = DpSize(8.dp, 8.dp)
)
您还可以为拇指和轨道指定自定义可组合项。
是的,但只是用 AndroidView
包装它并等待更好的未来,当 Google 团队在 Material 库中发布另一个更新时。
这是一个例子
AndroidView(
modifier = Modifier...//,
factory = { context ->
Slider(
ContextThemeWrapper(context, context.theme)
).apply {
// set listeners
it.addOnSliderTouchListener(object : SliderView.OnSliderTouchListener {
@SuppressLint("RestrictedApi")
override fun onStartTrackingTouch(slider: Slider) = Unit
@SuppressLint("RestrictedApi")
override fun onStopTrackingTouch(slider: Slider) {
onValueChangeFinished.invoke()
}
})
it.addOnChangeListener { _, value, _ ->
onValueChanged.invoke(value)
}
// your thumb customization
// your track customization
}
}, update = {
// set value
it.value = currentValue
})
应该放在@Composable
里面
有什么方法可以改变滑块拇指的大小吗?我想现在我们只能操纵颜色
var sliderPosition by remember { mutableStateOf(0f) }
Text(text = sliderPosition.toString())
Slider(
value = sliderPosition,
onValueChange = { sliderPosition = it },
valueRange = 0f..100f,
onValueChangeFinished = {
// launch some business logic update with the state you hold
// viewModel.updateSelectedSliderValue(sliderPosition)
},
steps = 5,
colors = SliderDefaults.colors(
thumbColor = MaterialTheme.colors.secondary,
activeTrackColor = MaterialTheme.colors.secondary
)
)
不,这个尺寸不能修改。您唯一可以做的就是将整个 Slider.kt 文件复制到您的项目中并进行修改。
最好给新视图起一个不同的名字,以避免将来产生误解。
您应该更改 ThumbRadius
常量,或者如果您的应用程序需要不同的大小,则将其设为变量。
我创建了一个库来轻松自定义 Slider,因为 Material 包中的 Slider 不灵活。 https://github.com/krottv/compose-sliders。下面是如何使用它来缩小拇指大小的代码示例:
var stateSlider by remember { mutableStateOf(0.5f) }
SliderValueHorizontal(
stateSlider, { stateSlider = it },
modifier = Modifier
.fillMaxWidth(),
// desired size of Slider's thumb
thumbSize = DpSize(8.dp, 8.dp)
)
您还可以为拇指和轨道指定自定义可组合项。
是的,但只是用 AndroidView
包装它并等待更好的未来,当 Google 团队在 Material 库中发布另一个更新时。
这是一个例子
AndroidView(
modifier = Modifier...//,
factory = { context ->
Slider(
ContextThemeWrapper(context, context.theme)
).apply {
// set listeners
it.addOnSliderTouchListener(object : SliderView.OnSliderTouchListener {
@SuppressLint("RestrictedApi")
override fun onStartTrackingTouch(slider: Slider) = Unit
@SuppressLint("RestrictedApi")
override fun onStopTrackingTouch(slider: Slider) {
onValueChangeFinished.invoke()
}
})
it.addOnChangeListener { _, value, _ ->
onValueChanged.invoke(value)
}
// your thumb customization
// your track customization
}
}, update = {
// set value
it.value = currentValue
})
应该放在@Composable