繁体   English   中英

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

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

我正在尝试为字体站点的分段 SeekBar 工作,步骤为 2。它正在工作,但我无法保持拇指位置,它始终为 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)
    }

我的偏好类 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?) {

                }
            })
        }

我只需要在onProgressChanged()保存progress的原始值。 就这样!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM