Я пытаюсь сделать то же самое.
Моя причина в том, что я хочу использовать стиль из моей собственной Темы, НО мой макет пользовательского интерфейса полностью генерируется в коде (с использованием пользовательского компоновщика макетов), без определения каких-либо виджетов в XML. Поэтому я не могу установить стиль в макете XML моего виджета - здесь нет макета XML.
Я думаю, что смогу установить этот стиль в коде моего виджета, используя
TypedArray a =
context.obtainStyledAttributes (AttributeSet
set, int [] attrs, int defStyleAttr, int defStyleRes)
Здесь (мне) кажется, что
AttributeSet set = null; потому что это то, что бы предоставил инфлятор XML.
int [] attrs = R.styleable.MyWidget; определяет, какие атрибуты я хочу посмотреть.
int defStyleAttr = myWidgetStyle; которая является ссылкой, определенной в моей теме, на стиль для MyWidget. Они оба определены в файлах XML в res / values.
«MyWidgetStyle» следует шаблону имени, который разработчики Android использовали в своем коде.
defStyleRes = 0; Я надеюсь, что мне не нужно об этом думать.
Затем, чтобы получить любое свойство, например цвет фона,
Color color = a.getColor (R.styleable.MyWidget_background, R.color.my_default);
* +1034 * a.recycle (); * 1 035 *
Это, кажется, работает - так или иначе, так далеко.
Кажется, что система сборки Android удобно генерирует правильный индекс для использования в a.getColor и называет его R.styleable.MyWidget_background. Я не сделал это имя сам, поэтому Android, должно быть, сделал это, используя мой XML для моего стиля MyWidget.
Я ожидаю, что можно найти правильный индекс, выполнив поиск в TypedArray для требуемого атрибута, но это было бы неэффективно, и TypedArray выглядит как неприятное устройство, с которым приходится иметь дело. Я бы использовал очень длинную палку, чтобы ткнуть ее!
Don