У меня есть собственный вид в библиотеке. Я хочу, чтобы потребитель библиотеки мог определять attrs для моего представления либо в стиле, либо в представлении XML, а также иметь значения по умолчанию, определенные в моей используемой библиотеке, если ни один из них не существует.
Если Я делаю это:
getContext().obtainStyledAttributes(attrs, R.styleable.MyView, 0, 0);
Я правильно получаю attrs из стиля потребителя. Если я сделаю это,
getContext().obtainStyledAttributes(attrs, R.styleable.MyView, 0, R.style.MyStyle);
Где MyStyle
определено в моей библиотеке , я получу значения из MyStyle
независимо от того, определил ли потребитель attrs или нет; MyStyle
всегда переопределяет значения от потребителя.
Какой правильный шаблон для определения атрибутов стиля по умолчанию в библиотеке? Я понимаю, что могу просто получить значения из getResources()...
в моем представлении.
EDIT: Помогло это сообщение: https://blog.danlew.net/2016/07/19/a-deep-dive-into-android-view-constructors/
В частности,
Вот их порядок приоритета, от самого высокого до самого низкого:
Любое значение, определенное в AttributeSet.
Определенный ресурс стиля в AttributeSet (т.е. style=@style/blah).
Атрибут стиля по умолчанию, заданный defStyleAttr.
Ресурс стиля по умолчанию, заданный defStyleResource ( если не было defStyleAttr).
Значения в теме.
Итак, в моем случае потребитель определил атрибуты в их тема, которая имеет самый низкий приоритет. Это объясняет, почему он работает как таковой, но я все еще не понимаю, какой шаблон правильный.