Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Kotlin&;访问资源ID;安科_Kotlin_Anko - Fatal编程技术网

使用Kotlin&;访问资源ID;安科

使用Kotlin&;访问资源ID;安科,kotlin,anko,Kotlin,Anko,我是Android/Kotlin/Anko新手,我对如何从Anko内部访问颜色(可能还有其他)资源有疑问 我知道有像textResource这样的帮助程序,您只需传递R.string.my_color即可简化设置资源字符串的过程,但是如何使用视图类中的资源实例访问颜色呢 假设您有一个子类Button,并希望更改文本颜色。如果您使用textResource它将更改文本字符串而不是颜色,如果您使用textColor则必须使用resources.getColor(R.color.my_color,nu

我是Android/Kotlin/Anko新手,我对如何从Anko内部访问颜色(可能还有其他)资源有疑问

我知道有像
textResource
这样的帮助程序,您只需传递
R.string.my_color
即可简化设置资源字符串的过程,但是如何使用
视图
类中的
资源
实例访问颜色呢

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

资源上创建扩展在这里有用吗

fun Int.fromResources(resources: Resources): Int {
    return resources.getColor(this, null)
}
推荐的方法是什么

编辑

我更改了
textColor
值扩展名来实现这一点,我发现这是最干净的做法,只是我不知道这是否真的对Android友好


我认为您可以使用这样的属性扩展,而不是您建议的属性扩展:

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的或您的),相同的属性名称具有不同的行为不是一个好主意

我建议使用
ContextCompat.getColor(context,R.color.color\u id)
代替
resources.getColor(v,null)
var TextView.textColorRes: Int
    get() = throw PropertyWithoutGetterException("textColorRes")
    set(@ColorRes v) = setTextColor(ContextCompat.getColor(context, v))