【问题标题】:How to create enum of colors (int) from android resource colors.xml如何从android资源colors.xml创建颜色枚举(int)
【发布时间】:2021-11-13 19:46:03
【问题描述】:

我正在尝试将 xml 颜色访问到枚举中。 因为我无法访问上下文。我不知道如何从资源中访问颜色。

颜色可以是任何形式(它们可以作为 int 或颜色检索)

到目前为止,我有这样的东西

enum class NotificationType(val color: Int){
    //    DANGER("#F97068"),
    //    WARNING("#D1D646"),
    //    INFO("#BEBEBE"),
    //    SUCCESS("#76D13A")
}

【问题讨论】:

    标签: android xml kotlin enums colors


    【解决方案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 类型。
    猜你喜欢
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 2012-09-01
    • 2013-07-20
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    相关资源
    最近更新 更多