Я создал пользовательское представление с пользовательским атрибутом:
<CustomView
app:customColor="?attr/customColorName" />
определенный пользовательский атрибут в атрибутах. xml:
<attr name="customColorName" format="reference" />
в стилях. xml:
<declare-styleable name="CustomView">
<attr name="customColor" format="reference" />
</declare-styleable>
и в темах. xml:
<style name="AppTheme.Theme1">
<item name="customColorName">@color/color1</item>
</style>
<style name "AppTheme.Theme1">
...
Итак, я пытаюсь получить атрибут из кода:
class CusomView(context: Context, attrs: AttributeSet) : SomeParentView(context, attrs) {
init {
val typedArray = context.obtainStyledAttributes(attributeSet, R.styleable.CustomView) // Wrong
val desiredColorAttribute = typedArray.getResourceId(R.styleable.CustomView_customColor)
if (desiredColorAttribute == R.attr.customColorName) {
//Wanna be here
} else {
//Sad Reality
}
}
}
Причина: Официальная документация метода getResourceId гласит:
Обратите внимание, что атрибут атрибута разрешен при получении всего объекта TypedArray. В результате эта функция будет возвращать идентификатор ресурса конечного значения ресурса, который был найден, а не обязательно исходный ресурс, который был указан атрибутом.
Итак, вопрос: есть ли способы получить оригинальный ресурс адекватным способом? (без нескольких вызовов рефлексии / ручной xml парсинг / et c)