首页 > 解决方案 > 如何保存 SeekBar 的值并将其传递给其他活动?

问题描述

我是 kotlin 语言的新手,我正在尝试在我的设置活动中实现SeekBar调整TextViews 大小并通过共享偏好保存其值,然后将 SeekBar 的值传递给主要活动!

我尝试了几个答案,但似乎没有一个对我有用!

设置活动

 @RequiresApi(Build.VERSION_CODES.O)
fun seekbarFontSize(){

    var savedProgress1:Int = 0
    val pref = PreferenceManager.getDefaultSharedPreferences(this)
    val editor = pref.edit()
    savedProgress1 = seekFontSize.progress
    editor.putInt("seekFonts", savedProgress1)
    editor.apply()
    seekFontSize.min = 20
    seekFontSize.max = 80
    seekbarCounter.text = "20"



        seekFontSize.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener{
       /**
        * Notification that the progress level has changed. Clients can use the fromUser parameter
        * to distinguish user-initiated changes from those that occurred programmatically.
        *
        * @param seekBar The SeekBar whose progress has changed
        * @param progress The current progress level. This will be in the range min..max where min
        * and max were set by [ProgressBar.setMin] and
        * [ProgressBar.setMax], respectively. (The default values for
        * min is 0 and max is 100.)
        * @param fromUser True if the progress change was initiated by the user.
        */
       override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
           textFont.textSize = progress.toFloat()
           textFont1.textSize = progress.toFloat()
           seekbarCounter.text = "$progress"

       }


       /**
        * Notification that the user has started a touch gesture. Clients may want to use this
        * to disable advancing the seekbar.
        * @param seekBar The SeekBar in which the touch gesture began
        */
       override fun onStartTrackingTouch(seekBar: SeekBar?) {
           Toast.makeText(this@SettingActivity, "start tracking",Toast.LENGTH_LONG).show()

       }

       /**
        * Notification that the user has finished a touch gesture. Clients may want to use this
        * to re-enable advancing the seekbar.
        * @param seekBar The SeekBar in which the touch gesture began
        */
       override fun onStopTrackingTouch(seekBar: SeekBar?) {
           Toast.makeText(this@SettingActivity, "stop tracking",Toast.LENGTH_LONG).show()
       }

   })

主要活动

fun seekbarSizing(){
    val pref = PreferenceManager.getDefaultSharedPreferences(this).getInt("seek", 0)
    if (pref == 0){
        TitleEt.textSize = 20f
    }
    if (pref == 1){
        TitleEt.textSize = 50f
    }
}

标签: androidkotlinsharedpreferences

解决方案


您需要确保在SeekBar移动时更新您的值。将您的存储逻辑移动到该onProgressChanged方法中将起作用。

@RequiresApi(Build.VERSION_CODES.O)
fun seekbarFontSize() {

  seekFontSize.min = 20
  seekFontSize.max = 80
  seekbarCounter.text = "20"

  seekFontSize.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
    override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
      textFont.textSize = progress.toFloat()
      textFont1.textSize = progress.toFloat()
      seekbarCounter.text = "$progress"

      // You need to save the current progress when the SeekBar is changed.
      val pref = PreferenceManager.getDefaultSharedPreferences(this)
      editor.putInt("seekFonts", savedProgress1)
      editor.apply()
    }

    // ... other methods
  }

})

请注意,您保存的值介于 20 和 80 之间,而您的检查仅针对 0 和 1。您可以使用不同的最小/最大值SeekBar来更轻松地计算大小,除非您只是想使用实际值作为字体大小,例如 80。


推荐阅读