gpt4 book ai didi

kotlin - 使用 Kotlin 和 Anko 访问资源 ID

转载 作者:行者123 更新时间:2023-12-02 01:26:47 26 4
gpt4 key购买 nike

我是 Android/Kotlin/Anko 的新手,我对从 Anko 中访问颜色(可能还有其他)资源的方式有疑问。

我知道有像 textResource 这样的助手,你只需传递 R.string.my_color 来简化设置资源字符串的过程,但是如何使用View 类中的 Resources 实例?

假设您有一个 Button 的子类并且想要更改文本颜色。如果您使用 textResource 它将更改文本字符串而不是颜色,如果您使用 textColor 则您必须使用 resources.getColor 指定真实的资源 ID (R.color.my_color, null) 如果您不必传递可选的主题参数(此处为null)就不会那么烦人了

Resources 上创建扩展在这里有用吗?

fun Int.fromResources(resources: Resources): Int {
return resources.getColor(this, null)
}

推荐的方式是什么?

编辑

我更改了 textColor 值扩展来做到这一点,我发现这是最干净的事情,除了我不知道这是否真的 Android 友好

var android.widget.TextView.textColor: Int
get() = throw AnkoException("'android.widget.TextView.textColor' property does not have a getter")
set(v) = setTextColor(resources.getColor(v, null))

最佳答案

我认为你可以使用像这样的属性扩展而不是你建议的那个:

var TextView.textColorRes: Int
get() = throw PropertyWithoutGetterException("textColorRes")
set(@ColorRes v) = setTextColor(resources.getColor(v, null))

或者按照 Damian Petla 的建议使用 ContextCompat:

var TextView.textColorRes: Int
get() = throw PropertyWithoutGetterException("textColorRes")
set(@ColorRes v) = setTextColor(ContextCompat.getColor(context, v))

你应该保留 Anko 的 textColor:

  • 允许您在某些时候需要时直接设置颜色,而无需从 XML 中获取颜色
  • 防止您导入错误的 textColor(Anko 的或您的),相同的属性名称具有不同的行为不是一个好主意。

关于kotlin - 使用 Kotlin 和 Anko 访问资源 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36695140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com