[英]How to change background color dynamically in Android
在我的應用程序中,我有 10 個視圖,我希望在單擊每個項目時將背景顏色更改為例如黃色,而其他視圖背景顏色為藍色。
我的視圖名稱是,例如: item1Line 、 item2Line 、 item3Line和... item10Line 。
我想我可以使用循環命令和條件命令來控制視圖。
我寫下面的代碼:
private fun lineColorSelected(item: Int) {
//Line colors
for (i in 1..10) {
if (item == i) {
view.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.yellow))
} else {
view.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.blue))
}
}
}
注意:在上面的代碼中, view
是示例。
但是我不知道如何將我的視圖添加到列表中並在 if 條件下使用它!
更新:我寫以下代碼的正常方式:
private fun selectedLine(item: Int) {
binding.apply {
when (item) {
1 -> {
item1Line.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.meatBrown))
item2Line.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.pictonBlue))
item3Line.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.pictonBlue))
}
2 -> {
item1Line.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.pictonBlue))
item2Line.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.meatBrown))
item3Line.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.pictonBlue))
}
3 -> {
item1Line.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.pictonBlue))
item2Line.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.pictonBlue))
item3Line.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.meatBrown))
}
}
}
但是以這種方式獲得 10 次觀看是非常糟糕的方式。
我想使用 for 和 if 條件以最佳實踐處理上述代碼。
我該怎么辦?
一個簡單的方法是
// using run so we don't need to go binding.item1Line etc, and the list gets returned
val myItems = binding.run {listOf(
item1Line, item2Line, item3Line, item4Line, item5Line,
item6Line, item7Line, item8Line, item9Line, item10Line
)}
然后您可以使用以下方法進行顏色設置:
private fun lineColorSelected(item: Int) {
myItems.forEachIndexed { i, line ->
val colour = if (i == item) R.color.meatBrown else R.color.pictonBlue
line.setBackgroundColor(ContextCompat.getColor(requireContext(), colour)
}
}
當你有一個很好的視圖列表時,你也可以輕松地設置點擊監聽器:
myItems.forEachIndexed { i, line ->
line.setOnClickListener { lineColorSelected(i) }
}
(我將第一項視為0
,因為我使用的是索引,您的代碼使用1
,所以如果您調整它,請注意這一點)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.