android Jetpack编写更改滑块拇指大小

x4shl7ld  于 11个月前  发布在  Android
关注(0)|答案(4)|浏览(110)

有什么方法可以改变滑块的大小吗?我想现在我们只能操纵颜色

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
    )
)

字符串


的数据

1cosmwyk

1cosmwyk1#

不能,此大小无法修改。您唯一可以做的是将整个Slider.kt文件复制到项目中并修改它。
最好给予新视图一个不同的名称,以避免将来产生误解。
你应该改变ThumbRadius常量,或者如果你在应用程序中需要不同的大小,让它成为一个变量。

eivnm1vs

eivnm1vs2#

使用M3androidx.compose.material3.Slider,您可以使用**thumb**属性自定义大小。
比如说:

var sliderPosition by remember { mutableStateOf(0f) }
Column {
    Text(text = sliderPosition.toString())
    Slider(
        modifier = Modifier.semantics { contentDescription = "Localized Description" },
        value = sliderPosition,
        onValueChange = { sliderPosition = it },
        valueRange = 0f..5f,
        steps = 4,
        interactionSource = interactionSource,
        onValueChangeFinished = {
            // launch some business logic update with the state you hold
        },
        thumb = {
            SliderDefaults.Thumb( //androidx.compose.material3.SliderDefaults
                interactionSource = interactionSource,
                thumbSize = DpSize(40.dp,40.dp)
            )
        },

    )
}

字符串


的数据

注意:material3至少需要1.0.0-beta03版本

pb3skfrl

pb3skfrl3#

我已经创建了一个库,以方便滑块的自定义,因为滑块从材料包是不灵活的。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)
)

字符串
你也可以为thumb和track指定自定义的合成对象。

bybem2ql

bybem2ql4#

是的,但只 Package 它与AndroidView和等待更好的未来,当谷歌团队发布另一个更新的材料库。
这里有一个例子

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

相关问题