在共享首选项中保存按钮的颜色(kotlin)



我喜欢在共享首选项中保存按钮的颜色。

<Button
android:id="@+id/farbe1"
android:layout_width="20dp"
android:layout_height="60dp"
android:layout_marginTop="10dp"
android:backgroundTint="@color/teal_700"
app:layout_constraintStart_toEndOf="@+id/FachMontag1"
app:layout_constraintTop_toTopOf="@+id/view5" />

按钮可以在按下时更改颜色。

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_montag)

val pref = getPreferences(Context.MODE_PRIVATE)
val Fach1 = pref.getString("FACHMONTAG1", "")
val Fach2 = pref.getString("FACHMONTAG2", "")
val Fach3 = pref.getString("FACHMONTAG3", "")
val Fach4 = pref.getString("FACHMONTAG4", "")
val Fach5 = pref.getString("FACHMONTAG5", "")
val Fach6 = pref.getString("FACHMONTAG6", "")
val FachMontag1 = findViewById<EditText>(R.id.FachMontag1)
FachMontag1.setText(Fach1)
val FachMontag2 = findViewById<EditText>(R.id.FachMontag2)
FachMontag2.setText(Fach2)
val FachMontag3 = findViewById<EditText>(R.id.FachMontag3)
FachMontag3.setText(Fach3)
val FachMontag4 = findViewById<EditText>(R.id.FachMontag4)
FachMontag4.setText(Fach4)
val FachMontag5 = findViewById<EditText>(R.id.FachMontag5)
FachMontag5.setText(Fach5)
val FachMontag6 = findViewById<EditText>(R.id.FachMontag6)
FachMontag6.setText(Fach6)

val Farbe1 = findViewById<Button>(R.id.farbe1)
Farbe1.setOnClickListener {
val Farbe1 = findViewById<Button>(R.id.farbe1)
number_of_clicks++
if (number_of_clicks == 1) {
Farbe1.setBackgroundColor(getColor(R.color.white))
number_of_clicks + 1
} else if (number_of_clicks == 2) {
Farbe1.setBackgroundColor(getColor(R.color.yellow))
number_of_clicks + 1
} else if (number_of_clicks == 3) {
Farbe1.setBackgroundColor(getColor(R.color.green))
number_of_clicks + 1
} else if (number_of_clicks == 4) {
Farbe1.setBackgroundColor(getColor(R.color.red))
number_of_clicks + 1
} else if (number_of_clicks == 5) {
Farbe1.setBackgroundColor(getColor(R.color.blue))
number_of_clicks + 1
} else if (number_of_clicks == 6) {
Farbe1.setBackgroundColor(getColor(R.color.purple))
number_of_clicks + 1
} else if (number_of_clicks == 7) {
Farbe1.setBackgroundColor(getColor(R.color.teal_700))
number_of_clicks = 0
}
}
}

我有一个按钮,可以从我的应用程序中保存一些其他内容(编辑文本(。

fun onSave(view: android.view.View) {

val pref = getPreferences(Context.MODE_PRIVATE)
val editor = pref.edit()
val FachMontag1 = findViewById<EditText>(R.id.FachMontag1)
editor.putString("FACHMONTAG1", FachMontag1.text.toString())
val FachMontag2 = findViewById<EditText>(R.id.FachMontag2)
editor.putString("FACHMONTAG2", FachMontag2.text.toString())
val FachMontag3 = findViewById<EditText>(R.id.FachMontag3)
editor.putString("FACHMONTAG3", FachMontag3.text.toString())
val FachMontag4 = findViewById<EditText>(R.id.FachMontag4)
editor.putString("FACHMONTAG4", FachMontag4.text.toString())
val FachMontag5 = findViewById<EditText>(R.id.FachMontag5)
editor.putString("FACHMONTAG5", FachMontag5.text.toString())
val FachMontag6 = findViewById<EditText>(R.id.FachMontag5)
editor.putString("FACHMONTAG6", FachMontag6.text.toString())

editor.commit()
}

我想像编辑文本一样保存按钮的颜色,但不太清楚如何调整颜色的代码。

您需要将颜色检索为Int值,以便存储它。您无法可靠地存储资源ID Int,因为无法保证下次编译应用程序时该值的解释方式相同。

此外,我会使用一个颜色列表来简化您的代码。

val Farbe1 = findViewById<Button>(R.id.farbe1)
val colors = listOf(
R.color.white,
R.color.yellow,
R.color.green,
//etc.
).map(::getColor)
Farbe1.setBackgroundColor(pref.getInt(“FARBE1”, colors[0])
Farbe1.setOnClickListener { view ->
number_of_clicks++
setBackgroundColor(colors[number_of_clicks % colors.length])
}
//...
val Farbe1 = findViewById<Button>(R.id.farbe1)
editor.putInt("FARBE1", (Farbe1.getBackgroundDrawable() as ColorDrawable).getColor())

然而,存储实际颜色将无法使其从颜色列表中的同一位置恢复。您可能只想存储颜色列表中的索引。例如:

editor.putInt("FARBE1", number_of_clicks)

我建议您使用视图绑定,这样您就不必到处使用findViewById

这不是一个真正的问题答案,但只是一个提示-如果您制作一个将FACHMONTAG键与R.id.FachMontagID关联的映射,您可以制作一些小函数来处理整个"用这个键提取数据,并将其设置在这个视图上。因为它在地图中,所以您可以迭代所有条目来保存或加载数据

val keysToIds = mapOf {
"FACHMONTAG1" to R.id.FachMontag1,
"FACHMONTAG2" to R.id.FachMontag2,
"FACHMONTAG3" to R.id.FachMontag3,
"FACHMONTAG4" to R.id.FachMontag4,
"FACHMONTAG5" to R.id.FachMontag5,
"FACHMONTAG1" to R.id.FachMontag6
}
fun loadEditTextData(prefs: SharedPreferences) {
keysToIds.forEach { key, id ->
val data = prefs.getString(key, "")
findViewById<EditText>(id).setText(data)
}
}
fun saveEditTextData(prefs: SharedPreferences) {
keysToIds.forEach { key, id ->
val data = findViewById<EditText>(id).text.toString()
prefs.putString(key, data)
}
}

这样,您只需传入一个实例就可以加载或保存到prefs。

你也可以一次查找所有这些视图(或者使用视图绑定(并生成一个key -> EditText映射(这样你就不会一直运行findViewById(,但这是否值得取决于你——我猜这不会经常触发

相关内容

  • 没有找到相关文章

最新更新