我可以像这样管理颜色资源吗?



我厌倦了像ContextCompat(context, color.red)一样打字。有没有简单的方法可以从颜色中获取颜色代码.xml?

我是 kotlin 的初学者。我已经尝试过这样,但我不确定这是最好的。我可以这样使用懒惰吗?

颜色.xml

<color name="skyblue">#00bcda</color>
<color name="blue">#4283e6</color>
<color name="green">#66bb6a</color>
<color name="orange">#ffa726</color>
<color name="red">#ff6b4e</color>
<color name="pink">#ffa5a5</color>

ColorManager.kt

class ColorManager(val context: Context) {
private fun getColor(id: Int) = lazy { ContextCompat.getColor(context, id) }
val skyblue by getColor(color.skyblue)
val blue by getColor(color.blue)
val green by getColor(color.green)
val orange by getColor(color.orange)
val red by getColor(color.red)
val pink by getColor(color.pink)
}

使用代码

val colors by lazy { ColorManager(this) }
...
colors.skyblue // this code return integer color code

使用以下扩展函数使用ContextCompat检索颜色:

fun Context?.getResourceColor(@ColorRes color: Int): Int {
var finalColor: Int? = null // Create local color variable
this?.let { // check if context is null or not
finalColor = ContextCompat.getColor(it, color) // Retrive resource color using ContextCompat
}
return finalColor ?: Color.TRANSPARENT // return default color if resource color not found
}

现在在任何具有如下上下文的文件中使用它:context.getResourceColor(R.color.someColor)

最新更新