簡體   English   中英

如何在 Android 中動態更改背景顏色

[英]How to change background color dynamically in Android

在我的應用程序中,我有 10 個視圖,我希望在單擊每個項目時將背景顏色更改為例如黃色,而其他視圖背景顏色為藍色。
我的視圖名稱是,例如: item1Lineitem2Lineitem3Line和... 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM