Я бы хотел динамически изменить эти свойства в styles.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» следует шаблону имени, которое разработчики андроида использовали в своем коде.
defStyleRes = 0;
Я надеюсь, что мне не нужно об этом думать.
Затем, чтобы получить любое свойство, такое как цвет фона,
Color color = a.getColor(R.styleable.MyWidget_background, R.color.my_default);
a.recycle();
Это, кажется, работает - все равно далеко.
Кажется, что AndroidСистема сборки удобно генерирует правильный индекс для использования в a.getColor и называет его R.styleable.MyWidget_background.Я не сделал это имя, поэтому Android, должно быть, сделал это, используя мой XML для моего стиля MyWidget.
Я ожидаю, что можно найти правильный индекс, выполнив поиск TypedArray для требуемого атрибута, но это будетнеэффективно, и TypedArray выглядит как неприятная штуковина.Я бы использовал очень длинную палку, чтобы ткнуть ее!
Дон