在共享首选项中保存按钮的颜色 (kotlin)
Save color of a button in shared preferences (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.FachMontag
ID 相关联,您可以制作一些小函数来处理整个“使用此键提取数据并将其设置在此视图`` 上。并且因为它在地图中,所以您可以遍历所有条目以保存或加载数据
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)
}
}
这样你就可以通过传入一个实例来加载或保存到首选项。
您也可以一次查找所有这些视图(或使用视图绑定)并生成一个 key -> EditText
地图(这样您就不会保留 运行 findViewById
),但这取决于你是否值得 - 我猜这不会经常触发
我喜欢在共享首选项中保存按钮的颜色。
<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.FachMontag
ID 相关联,您可以制作一些小函数来处理整个“使用此键提取数据并将其设置在此视图`` 上。并且因为它在地图中,所以您可以遍历所有条目以保存或加载数据
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)
}
}
这样你就可以通过传入一个实例来加载或保存到首选项。
您也可以一次查找所有这些视图(或使用视图绑定)并生成一个 key -> EditText
地图(这样您就不会保留 运行 findViewById
),但这取决于你是否值得 - 我猜这不会经常触发