根据主题设置文本颜色 - 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)
}
我正在尝试根据当前活动的主题更改片段中文本的颜色。但是该应用程序不断崩溃并出现以下错误
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)
}