android - 如何保存 SeekBar 的值并将其传递给其他活动?
问题描述
我是 kotlin 语言的新手,我正在尝试在我的设置活动中实现SeekBar
调整TextView
s 大小并通过共享偏好保存其值,然后将 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。
推荐阅读
- javascript - 通过 google Forms API 和 Google App 脚本自动提交 Google Form
- wordpress - 如何在没有钩子的情况下在 WooCommerce 评论订单表中添加文本
- c# - 可以在同一台机器上的多个端点共享同一个端口吗?
- python - 有没有办法修复逗号溢出的 CSV 文件数据
- java - 如何使用多个扫描仪(多个资源)处理多个线程?
- node.js - Supertest 在 Node 中进行 Jest 测试时出现 MaxListenersExceedingWarning 错误
- c++ - 实施
在 Windows Visual Studio 中 - sql - 具有相同 fk 到列的多行
- javascript - 如何在最后一张幻灯片上停止我的 html 演示文稿?
- swift - Swift:如果这是在 VC 中制作嵌套 UIView 的好方法,需要指导