Kotlin Fragment中如何获取主题的主文本颜色?
正确获取主题主文本颜色的方法
你遇到的错误是因为android.R.attr.textColorPrimary是属性ID,而非直接的颜色资源ID,ContextCompat.getColor()无法直接解析属性,必须先通过主题解析出对应的颜色资源ID,再获取颜色值。
以下是两种可行的实现方式:
方法一:通过TypedValue解析属性
val typedValue = TypedValue() requireActivity().theme.resolveAttribute(android.R.attr.textColorPrimary, typedValue, true) val textColorPrimary = ContextCompat.getColor(requireActivity(), typedValue.resourceId)
方法二:通过StyledAttributes批量解析属性
如果需要同时获取多个主题属性,推荐用这种方式:
// 定义需要解析的属性数组 val attrs = intArrayOf(android.R.attr.textColorPrimary) val typedArray = requireActivity().obtainStyledAttributes(attrs) // 第一个参数是属性在数组中的索引,第二个是默认颜色(当属性解析失败时使用) val textColorPrimary = typedArray.getColor(0, android.graphics.Color.BLACK) // 必须回收TypedArray,避免内存泄漏 typedArray.recycle()
解析完成后,你就可以将textColorPrimary设置给饼图的文本颜色了。
内容的提问来源于stack exchange,提问作者jane
相关产品推荐
相关产品推荐

