问题描述
问题是这个。
我有一个名为CustomedView
的自定义视图,并定义了一个名为myTintColor
的自定义视图属性,因此我可以在XML中使用我的自定义视图,并用自定义属性myTintColor
定义其属性。 >
这样的代码:
<CustomedView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:myTintColor="@color/color1"
/>
// in kotlin or java code
val a = context.obtainStyledAttributes(attrs,R.styleable.CustomedView)
val colorResId = a.getResourceId(R.styleable.CustomedView_myTintColor,0)
val myTintColor = context.getColor(colorResId)
a.recycle()
任何人都可以理解以上内容,并且效果很好。现在,如果我定义这样的主题属性
<resources>
<attr name="myBackgroundColor" format="color" />
</resources>
<CustomedView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:myTintColor="?attr/myBackgroundColor"
/>
我的代码是:
val a = context.obtainStyledAttributes(attrs,R.styleable.CustomedView)
val attrId = a.getResourceId(R.styleable.CustomedView_myTintColor,0)
val typedValue = TypedValue()
context.theme.resolveAttribute(attrId,typedValue,true)
val myTintColor = typedValue.data // but this value is always 0.
a.recycle()
解决方法
您的自定义属性 myBackgroundColor
仍然引用颜色。
val color = a.getColor(R.styleable.CustomedView_myBackgroundColor,resources.getColor(R.color.defaultColor))
textView.setTextColor(color)