2010-07-13 2 views

ответ

3

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

myTextView.setTextAppearance 
myTextView.setTextSize 
myTextView.setTextColor 
+0

спасибо за ваш ответ, но если я хочу, я хочу, чтобы добавить больше чем ярлык звезды. кажется, что есть способ установить стиль во время выполнения. но в моем случае я хочу, чтобы добавить эту звезду флажок как я могу сделать это? –

0

Я пытаюсь сделать аналогичную вещь.

Причина в том, что я хочу использовать стиль из своей собственной темы, НО мой макет интерфейса пользователя полностью сгенерирован в коде (с использованием собственного компоновщика компоновки) без определения каких-либо виджетов в XML. Поэтому я не могу установить стиль в XML-макете моего виджета - XML-макета отсутствует.

Я имею в виду, что я смогу установить этот стиль в коде моего виджета с помощью

TypedArray а =

context.obtainStyledAttributes (AttributeSet набор, ИНТ [] AttrS, внутр defStyleAttr , внутр defStyleRes)

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

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

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

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

  4. defStyleRes = 0; Я надеюсь, что мне не нужно об этом думать.

Затем, чтобы получить какое-либо свойство, такие как цвет фона,

цвета Цвета = a.getColor (R.styleable.MyWidget_background, R.color.my_default);

a.recycle();

Это похоже на работу - так или иначе.

Кажется, что система сборки android создает правильный индекс для использования в a.getColor и называет его R.styleable.MyWidget_background. Я не сделал это имя сам, поэтому Android, должно быть, сделал это, используя мой XML для моего настраиваемого MyWidget.

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

Дон

2

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

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

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

25

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

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

есть ли что-то похожее для линейногоLayout? –

+2

Не работает вообще! –

+0

Просто обратите внимание, что 'setTextAppearance (контекст контекста, @StyleRes int resId)' устарел, и мы должны использовать 'setTextAppearance (@StyleRes int resId)' вместо – AllDayAmazing

0

TextView (контекст Контекст, AttributeSet ATTRS, внутр defStyle)

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

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

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

Смежные вопросы