如何根据给定数值设置Android中SeekBar的进度?
你当前的代码仅配置了SeekBar的进度变化监听逻辑,没有主动将传入的目标数值赋值给SeekBar,因此会出现数值已正确获取但进度条没有对应更新的问题,按以下方案修改即可:
步骤1:主动设置初始进度
在配置监听逻辑之前,先调用progress属性(或带动画的setProgress方法)将传入的目标进度赋值给SeekBar,示例代码如下:
// 入参targetProgress为你已经拿到的目标数值 private fun setSeekBar(targetProgress: Int) { // 先给SeekBar设置初始进度,第二个参数传true可开启平滑滚动动画,不需要可以去掉 binding.seekBar.setProgress(targetProgress, true) // 再配置进度变化监听 binding.seekBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener { override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { // 进度变化时同步更新展示的数值文本 binding.numberUpdateSeekBar.text = getString(R.string.seek_bar_result, progress) } override fun onStartTrackingTouch(seekBar: SeekBar?) { } override fun onStopTrackingTouch(seekBar: SeekBar?) { } }) }
注意事项
- 要确保传入的
targetProgress数值范围和你在布局中给SeekBar设置的android:max属性匹配,比如max设为100时,传入的数值不能超过100,否则进度无法正常展示 - 该方法需要在Fragment的
onViewCreated生命周期回调中调用,要保证视图绑定已经初始化完成、目标数值已经获取到之后再执行 - 如果你的项目使用的是AndroidX AppCompat下的SeekBar,还可以通过
binding.seekBar.isIndeterminate = false确保进度条处于确定模式,避免进度不显示的问题

内容的提问来源于stack exchange,提问作者Anna B
相关产品推荐
相关产品推荐

