设置进度值后如何保存 SeekBar 拇指位置?

How to save SeekBar thumb position after setting value to its progress?

我正在尝试使用步骤 2 为字体站点创建一个分段的 SeekBar。 它工作正常,但我无法保持拇指位置,它始终处于 0。

private fun fontSize() {
        val view = LayoutInflater.from(this).inflate(R.layout.font_size_layout, null)
        size = view.findViewById(R.id.font_size_sb)
        val preference = PrefManager(this)
        font = view.findViewById(R.id.font_size_tv)
        font.textSize = preference.getFontSize().toFloat()
        font.text = preference.getFontSize().toString()

        size.apply {
            max = (36 - 12) / 2
            progress = preference.getFontSize()
            setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
                override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
                    updateFontSize(12 + (progress * 2))
                }

                override fun onStartTrackingTouch(seekBar: SeekBar?) {
                }

                override fun onStopTrackingTouch(seekBar: SeekBar?) {
                }
            })
        }
        AlertDialog.Builder(
            this,
            R.style.AlertDialogSlider
        ).apply {
            setView(view)
            create()
            show()
        }
    }

    private fun updateFontSize(i: Int) {
        note.textSize = i.toFloat()
        font.text = i.toString()
        font.textSize = i.toFloat()
        preference.saveFontSize(i)
    }

我的偏好class PrefManager:

class PrefManager(private var context: Context) {
    fun saveFontSize(size: Int) {
        context.getSharedPreferences("font_size", AppCompatActivity.MODE_PRIVATE).edit().apply {
            putInt("fontSize", size)
            apply()
        }
    }

    fun getFontSize(): Int {
        return context.getSharedPreferences("font_size", AppCompatActivity.MODE_PRIVATE)
            .getInt("fontSize", -1)
    }

比如我设置字号为18:

这很好,对我有用,但是当我想再更改一次大小时,SeekBar 的位置并没有留在我最后离开的地方。它结束了:

怎样才能保住位置?

花了很多时间,终于找到了解决办法,而且很简单:

class PrefManager(private var context: Context) {
    fun saveFontSize(size: Int, progress: Int) {
        context.getSharedPreferences("font_size", AppCompatActivity.MODE_PRIVATE).edit().apply {
            putInt("fontSize", size)
            putInt("progress", progress)
            apply()
        }
    }

    fun getFontSize(): Int {
        return context.getSharedPreferences("font_size", AppCompatActivity.MODE_PRIVATE)
            .getInt("fontSize", 18)
    }
    fun getProgress(): Int {
        return context.getSharedPreferences("font_size", AppCompatActivity.MODE_PRIVATE)
            .getInt("progress", 3)
    }
}

SeekBar 的一段代码:

size.apply {
            progress = preference.getProgress()
            setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
                override fun onProgressChanged(
                    seekBar: SeekBar?,
                    progress: Int,
                    fromUser: Boolean
                ) {
                    val fontSize = 12 + (progress * 2)
                    note.textSize = fontSize.toFloat()
                    font.text = fontSize.toString()
                    preference.saveFontSize(fontSize, progress)
                }

                override fun onStartTrackingTouch(seekBar: SeekBar?) {
                }

                override fun onStopTrackingTouch(seekBar: SeekBar?) {

                }
            })
        }

我只好将 progress 的原始值保存在 onProgressChanged() 中。就这些!