根据主题设置文本颜色 - android/kotlin 错误

Set text color based on theme - android/kotlin error

我正在尝试根据当前活动的主题更改片段中文本的颜色。但是该应用程序不断崩溃并出现以下错误

android.content.res.Resources$NotFoundException: Resource ID #0xff000000
    at android.content.res.ResourcesImpl.getValue(ResourcesImpl.java:237)
    at android.content.res.Resources.getColor(Resources.java:1059)
    at android.content.Context.getColor(Context.java:677)

我的代码如下:

bind.scrollDate.setTextColor(view.context.getColor(if (day.date == selectedDate) R.color.white else getColorByThemeAttr(requireContext(),R.attr.txtcolor,R.color.txtcolor)))

    //getting colors based on theme
private fun getColorByThemeAttr(context: Context, attr: Int, defaultColor: Int): Int {
    val typedValue = TypedValue()
    val theme: Resources.Theme = context.theme
    val got: Boolean = theme.resolveAttribute(attr, typedValue, true)
    return if (got) typedValue.data else defaultColor
}

我知道在片段中使用正确的上下文很重要,但我已经尝试了多种变体 none 有效....

请问有什么解决办法吗?

因此,TypedValue 将不是资源 ID,而是值。这意味着您应该更改对此的调用:

    a.setTextColor(if (1!=1) view.context.getColor(R.color.colorAccent) else getColorByThemeAttr(requireContext(),R.attr.txtColor,R.color.color2))

你的方法是这样的:

private fun getColorByThemeAttr(context: Context, attr: Int, defaultColor: Int): Int {
    val typedValue = TypedValue()
    val theme: Resources.Theme = context.theme
    val got: Boolean = theme.resolveAttribute(attr, typedValue, true)
    return if (got) typedValue.data else context.getColor(defaultColor)
}