Как получить исходный атрибут ресурса android layout xml? - PullRequest
0 голосов
/ 23 января 2020

Я создал пользовательское представление с пользовательским атрибутом:

<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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...