Подтвердить что ты не робот

Android: установить стиль textView во время выполнения

- любое тело знает, как установить стиль fore textView во время выполнения:

что-то вроде этого

myTextView.setStyle(R.style.mystyle);
4b9b3361

Ответ 1

Очень просто использовать setTextApparence и ваш стиль

 myTextView.setTextAppearance(getApplicationContext(), R.style.boldText);

Ответ 2

вам придется вручную установить каждый элемент стиля, который вы измените, во время выполнения, AFAIK нет способа setStyle.

myTextView.setTextAppearance
myTextView.setTextSize
myTextView.setTextColor

Ответ 3

Я также до сих пор не нашел (к сожалению) способ изменить стиль во время выполнения.

Если речь идет только об изменении вида флажка (как вы отметили в комментарии к другому ответу), вы можете использовать это:

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 файлы в выпадающем каталоге.

Ответ 4

Я пытаюсь сделать то же самое.

Моя причина в том, что я хочу использовать стиль из моей собственной темы, НО мой макет пользовательского интерфейса полностью генерируется в коде (используя собственный конструктор компоновки) без определения каких-либо виджетов в 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 выглядит как неприятное приспособление для решения. Я бы использовал очень длинную палку, чтобы высунуть ее!

Дон

Ответ 5

TextView (контекст контекста, AttributeSet attrs, int defStyle)

Несмотря на то, что есть доступная конструкция, но кажется, что это ошибка, я попробовал это и нашел, что указанный стиль не будет применяться к моему представлению.

После дальнейшего поиска полученная ошибка: http://code.google.com/p/android/issues/detail?id=12683

Чтобы обойти эту проблему, я использую методы setBackgroundResource, setTextAppearance и т.д.:)