如何从android资源colors.xml创建颜色枚举(int)
Posted
技术标签:
【中文标题】如何从android资源colors.xml创建颜色枚举(int)【英文标题】:How to create enum of colors (int) from android resource colors.xml 【发布时间】:2021-11-13 19:46:03 【问题描述】:我正在尝试将 xml 颜色访问到枚举中。 因为我无法访问上下文。我不知道如何从资源中访问颜色。
颜色可以是任何形式(它们可以作为 int 或颜色检索)
到目前为止,我有这样的东西
enum class NotificationType(val color: Int)
// DANGER("#F97068"),
// WARNING("#D1D646"),
// INFO("#BEBEBE"),
// SUCCESS("#76D13A")
【问题讨论】:
【参考方案1】:您可以使用 int 颜色资源而不是十六进制表示:
enum class NotificationType(val color: Int)
DANGER(R.color.danger),
WARNING(R.color.warning),
INFO(R.color.info),
SUCCESS(R.color.success);
colors.xml:
<resources>
<color name="danger">#F97068</color>
<color name="warning">#D1D646</color>
<color name="info">#BEBEBE</color>
<color name="success">#76D13A</color>
</resources>
更新:
@Tenfour04 的好建议,您可以添加一个实用方法来从某个枚举值中获取颜色:
enum class NotificationType(val color: Int)
DANGER(R.color.danger),
WARNING(R.color.warning),
INFO(R.color.info),
SUCCESS(R.color.success);
fun toArgb(context: Context) =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
context.resources.getColor(color, null)
else
context.resources.getColor(color) // Deprecated in API level 23
用法:
val color = NotificationType.DANGER.toArgb(context)
【讨论】:
您还可以在类中添加一个函数,用于使用 Context 检索实际颜色。fun toArgb(context: Context) = context.resources.getColor(color)
但我认为更好的属性名称是colorResId
,这样它就不太可能与颜色混淆,它也是 Int 类型。以上是关于如何从android资源colors.xml创建颜色枚举(int)的主要内容,如果未能解决你的问题,请参考以下文章
xml 材料设计调色板Colors.xml Android的资源文件
Xamarin Android:以编程方式从 colors.xml 获取颜色值