Как сохранить положение большого пальца SeekBar после установки значения для его прогресса? - PullRequest
0 голосов
/ 02 февраля 2020

Я пытаюсь получить сегментированный 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)
    }

Мои предпочтения 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:

Chosen font size

Это хорошо и работает для меня , но когда я хочу изменить размер еще раз, позиция SeekBar не остается там, где я оставил его в последний раз. Это заканчивается:

Thumb went to end

Как мне сохранить позицию?

Большое спасибо заранее.

1 Ответ

0 голосов
/ 03 февраля 2020

Потратив много времени, я наконец-то нашел решение, и оно очень простое:

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(). Это все! Надеюсь, это кому-нибудь поможет, хотя это тривиально.

...