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

Любое тело знает, как установить стиль 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)

Вот мне кажется (мне), что

  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 = 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 и т. Д. Резко 🙂

Intereting Posts
Как обмениваться изображениями на холсте в Android? Форматирование HTML в новой библиотеке привязки данных Android Список установленных пакетов sdk через командную строку В приложении Android toolbar.setTitle не действует – имя приложения отображается как заголовок CertPathValidatorException: Trust anchor для пути сертификации не найден Как использовать PubNub для публикации отзыва, чтобы узнать, какое сообщение следует публиковать в случае ошибки NfcAdapter.getDefaultAdapter (это) возвращает null в эмуляторе Eclipse сохраняет рабочее пространство … и строительное пространство … и рабочее пространство для строительства Java.io.FileNotFoundException: этот файл нельзя открыть в качестве дескриптора файла; Он, вероятно, сжат Как вы получаете исходящий звонок в трансляторе вещания Исключение при рендеринге: action_bar Получать уведомление (через BroadcastReceiver), когда GPS (или службы определения местоположения) запускается / останавливается Cast Long длинным Синхронизация двух ViewPagers с помощью OnPageChangeListener Реализация сервисов google play в android