如何保存 SeekBar 的值并将其传递给其他活动?



我是 kotlin 语言的新手,正在尝试在我的设置活动中实现一个用于调整TextView大小的SeekBar,并通过共享首选项保存其值,然后将 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
}
}

您需要确保在移动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。

相关内容

最新更新