getStyledAttributes () путаница, defStyleRes - PullRequest
0 голосов
/ 08 мая 2020

У меня есть собственный вид в библиотеке. Я хочу, чтобы потребитель библиотеки мог определять 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/

В частности,

Вот их порядок приоритета, от самого высокого до самого низкого:

  1. Любое значение, определенное в AttributeSet.

  2. Определенный ресурс стиля в AttributeSet (т.е. style=@style/blah).

  3. Атрибут стиля по умолчанию, заданный defStyleAttr.

  4. Ресурс стиля по умолчанию, заданный defStyleResource ( если не было defStyleAttr).

  5. Значения в теме.

Итак, в моем случае потребитель определил атрибуты в их тема, которая имеет самый низкий приоритет. Это объясняет, почему он работает как таковой, но я все еще не понимаю, какой шаблон правильный.

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