Как я могу изменить стиль кнопки динамически в Android?

Я хочу изменить стиль кнопки динамически, то есть в Java-коде, что-то вроде:

((Button)findViewById(id)).setStyle("@styles/foo") <resources> <style name="foo"> <item name="android:adjustViewBounds">true</item> <item name="android:maxHeight">100px</item> <item name="android:maxWidth">200px</item> </style> </resources> 

Я не видел ничего подобного setStyle, поэтому:

Мне нужно изменить каждое свойство, или я могу изменить весь стиль?

Solutions Collecting From Web of "Как я могу изменить стиль кнопки динамически в Android?"

Проверьте этот вопрос: как программно установить атрибут стиля в представлении

Чтобы присвоить стиль, подобный этому

 <style name="ButtonHOLO" parent="android:Widget.Button"> <item name="android:background">@drawable/btn_default_holo_dark</item> <item name="android:minHeight">@dimen/calc_btn_h</item> <item name="android:minWidth">@dimen/calc_btn_w</item> <item name="android:textColor">#ffffff</item> </style> 

На кнопку динамически вам нужно использовать функции setBackgroundResource () и setTextAppearance (). Например:

 btn.setBackgroundResource(R.drawable.btn_default_holo_dark); btn.setTextAppearance(context, R.style.ButtonHOLO); 

где

btn_default_holo_dark

Это имя файла .xml, который описывает селектор для вашей кнопки.

Самый простой способ, который я нашел, чтобы обойти этот очевидный недостаток, – это сделать кнопки. Сделайте один из них Visibility.gone . Затем просто измените Visibility с другой, чтобы перейти и активировать первую с помощью Visibility.visible .

Мне не очень нравится это решение, но оно быстрее и безопаснее, чем альтернативы, которые я нашел до сих пор.

Вы также можете взглянуть на 9 патч-изображений. Они очень полезны для настройки размера и текста изображения, привязанного к вашему виджету или кнопке, на основе текущего устройства, на котором запущено приложение.

9 патчей

Инструмент для рисования 9