以编程方式将主题属性值中的颜色应用到 AppCompat TextView
Apply color from theme attr value to AppCompatTextView programatically
我正在尝试使用 setColor
方法设置 AppCompatTextView
的文本颜色,并在我的主题中提供来自自定义属性的颜色,但它似乎不起作用。
以下是我使用的确切代码
binding.loginTextTv.setTextColor(R.attr.primaryMainColor)
当我做类似
的时候它工作正常
binding.loginTextTv.setTextColor(R.color.primaryColor)
如何更改主题属性的颜色?
我的自定义属性看起来像
<resources>
<attr name="primaryMainColor" type="color"/>
</resources>
你应该传递给那里的不是参考,而是像这样的颜色:
ContextCompat.getColor(context, R.color.primaryColor)
或者如果你想获得主题颜色,试试这个:
/**
* Retrieves colors from theme attributes
*
* @throws Resources.NotFoundException Throws NotFoundException if the given ID does not exist.
* @throws UnsupportedOperationException if the attribute is defined but is
* not an integer color or color state list.
*/
@ColorInt
@SuppressLint("Recycle")
fun Context.getThemeColor(@AttrRes colorAttrId: Int): Int {
return obtainStyledAttributes(intArrayOf(colorAttrId))
.use { it.getColor(0, Color.WHITE) }
}
drawable.setTint(requireContext().getThemeColor(android.R.attr.colorBackground))
或者可能是你的自定义属性不属于视图(它在遍历属性时没有在内部解析它)
因此,解决方案是从 AppCompatTextView
创建一个派生的 class 并在 init()
.
上解析您的自定义属性
我正在尝试使用 setColor
方法设置 AppCompatTextView
的文本颜色,并在我的主题中提供来自自定义属性的颜色,但它似乎不起作用。
以下是我使用的确切代码
binding.loginTextTv.setTextColor(R.attr.primaryMainColor)
当我做类似
的时候它工作正常binding.loginTextTv.setTextColor(R.color.primaryColor)
如何更改主题属性的颜色?
我的自定义属性看起来像
<resources>
<attr name="primaryMainColor" type="color"/>
</resources>
你应该传递给那里的不是参考,而是像这样的颜色:
ContextCompat.getColor(context, R.color.primaryColor)
或者如果你想获得主题颜色,试试这个:
/**
* Retrieves colors from theme attributes
*
* @throws Resources.NotFoundException Throws NotFoundException if the given ID does not exist.
* @throws UnsupportedOperationException if the attribute is defined but is
* not an integer color or color state list.
*/
@ColorInt
@SuppressLint("Recycle")
fun Context.getThemeColor(@AttrRes colorAttrId: Int): Int {
return obtainStyledAttributes(intArrayOf(colorAttrId))
.use { it.getColor(0, Color.WHITE) }
}
drawable.setTint(requireContext().getThemeColor(android.R.attr.colorBackground))
或者可能是你的自定义属性不属于视图(它在遍历属性时没有在内部解析它)
因此,解决方案是从 AppCompatTextView
创建一个派生的 class 并在 init()
.