简体   繁体   中英

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

I'm trying to get worked a segmented SeekBar for font site with step of 2. It's working, but I can't keep thumb position, it is always on 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)
    }

My preference 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)
    }

For example, I set the font size to 18:

选择的字体大小

That's good and works for me, but when I want to change the size one more time, the SeekBar's position does not stay there, where I left it lastly. It goes to end:

大拇指结束

How can I keep the position?

After spending a lot of time, I finally found a solution and it's very simple:

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

And piece of code for 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?) {

                }
            })
        }

I had just to keep saved the original values of progress within the onProgressChanged() . That's all!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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