Android: установить стиль TextView во время выполнения - PullRequest
12 голосов
/ 13 июля 2010

Кто-нибудь знает, как установить стиль для TextView во время выполнения:

как-то так

myTextView.setStyle(R.style.mystyle);

Ответы [ 5 ]

25 голосов
/ 02 февраля 2012

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

 myTextView.setTextAppearance(getApplicationContext(), R.style.boldText);
3 голосов
/ 13 июля 2010

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

myTextView.setTextAppearance
myTextView.setTextSize
myTextView.setTextColor
2 голосов
/ 29 октября 2010

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

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

myCheckbox.setButtonDrawable(R.drawable.star_checkbox);

И есть файл star_checkbox.xml в каталоге drawable, описывающий фон флажка в соответствии с его состояниями, такие как:

<?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 вваш каталог для рисования.

0 голосов
/ 16 мая 2012

TextView (Контекст контекста, атрибуты AttributeSet, int defStyle)

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

После поиска получил эту ошибку: http://code.google.com/p/android/issues/detail?id=12683

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

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

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

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

  4. 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

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