Android меняет стиль динамически - PullRequest
4 голосов
/ 21 июня 2010

Я описал свойства моих объектов (неважно, что это за объект) в файле styles.xml.Я хотел бы изменить эти свойства динамически в styles.xml.

Кто-нибудь знает, как я могу это сделать?

Ответы [ 3 ]

6 голосов
/ 07 марта 2011

Вы можете сделать это следующим образом:

В Activity:

this.setTheme(R.style.ThemeRed);

В styles.xml:

<resources>
  <style name="ThemeBlack" parent="@android:style/Theme">
    <item name="android:textColor">#FFFFFF</item>
    <item name="android:typeface">sans</item>
    <<item name="android:background">#999999</item>
    <item name="android:textSize">16sp</item>
  </style>
  <style name="ThemeRed" parent="@android:style/Theme">
    <item name="android:textColor">#FFFFFF</item>
    <item name="android:typeface">sans</item>
    <item name="android:background">#c81111</item>
    <item name="android:textSize">16sp</item>
  </style>
</resources>
3 голосов
/ 21 июня 2010

Я вижу противоречивые ответы на этот вопрос. Это говорит да , но это говорит нет . Я посмотрел на документы для Android для просмотра и не могу найти метод setStyle.

0 голосов
/ 25 сентября 2010

Я бы хотел динамически изменить эти свойства в styles.xml.

Что именно вы хотите изменить?Стиль, применяемый во время выполнения?

Я думаю, вы можете сделать это в своем коде, используя

TypedArray a =  context.obtainStyledAttributes(AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes)

Здесь (мне) кажется, что

  1. AttributeSet set = null; потому что это то, что предоставил бы инфлятор XML.

  2. int[] attrs = R.styleable.MyWidget; определяет, какие атрибуты я хочу посмотреть.

  3. int defStyleAttr = myWidgetStyle;, который является ссылкой, определенной в моей теме, на стиль для MyWidget.Они оба определены в файлах XML в res / values.«MyWidgetStyle» следует шаблону имени, которое разработчики андроида использовали в своем коде.

  4. 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 выглядит как неприятная штуковина.Я бы использовал очень длинную палку, чтобы ткнуть ее!

Дон

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