- любое тело знает, как установить стиль fore textView во время выполнения:
что-то вроде этого
myTextView.setStyle(R.style.mystyle);
- любое тело знает, как установить стиль fore textView во время выполнения:
что-то вроде этого
myTextView.setStyle(R.style.mystyle);
Очень просто использовать setTextApparence и ваш стиль
myTextView.setTextAppearance(getApplicationContext(), R.style.boldText);
вам придется вручную установить каждый элемент стиля, который вы измените, во время выполнения, AFAIK нет способа setStyle.
myTextView.setTextAppearance
myTextView.setTextSize
myTextView.setTextColor
Я также до сих пор не нашел (к сожалению) способ изменить стиль во время выполнения.
Если речь идет только об изменении вида флажка (как вы отметили в комментарии к другому ответу), вы можете использовать это:
myCheckbox.setButtonDrawable(R.drawable.star_checkbox);
И создайте файл star_checkbox.xml в выпадающем каталоге, описывающий фон флажка в соответствии со своими состояниями, такими как:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:state_focused="true"
android:drawable="@drawable/star_checkbox_checked_focused" />
<item android:state_checked="false" android:state_focused="true"
android:drawable="@drawable/checkbox_not_checked_focused" />
<item android:state_checked="false"
android:drawable="@drawable/checkbox_not_checked" />
<item android:state_checked="true"
android:drawable="@drawable/checkbox_checked" />
</selector>
Также вам нужны соответствующие png файлы в выпадающем каталоге.
Я пытаюсь сделать то же самое.
Моя причина в том, что я хочу использовать стиль из моей собственной темы, НО мой макет пользовательского интерфейса полностью генерируется в коде (используя собственный конструктор компоновки) без определения каких-либо виджетов в 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 = a.getColor(R.styleable.MyWidget_background, R.color.my_default);
a.recycle();
Это похоже на работу - так или иначе.
Кажется, что система сборки android удобно генерирует правильный индекс для использования в a.getColor и называет его R.styleable.MyWidget_background. Я не сделал это имя сам, поэтому Android, должно быть, сделал это, используя мой XML для моего настраиваемого MyWidget.
Я ожидаю, что можно найти правильный индекс, выполнив поиск в TypedArray для требуемого атрибута, но это будет неэффективно, и TypedArray выглядит как неприятное приспособление для решения. Я бы использовал очень длинную палку, чтобы высунуть ее!
Дон
TextView (контекст контекста, AttributeSet attrs, int defStyle)
Несмотря на то, что есть доступная конструкция, но кажется, что это ошибка, я попробовал это и нашел, что указанный стиль не будет применяться к моему представлению.
После дальнейшего поиска полученная ошибка: http://code.google.com/p/android/issues/detail?id=12683
Чтобы обойти эту проблему, я использую методы setBackgroundResource, setTextAppearance и т.д.:)