Обычно вы не можете изменять стили программно; вы можете установить внешний вид экрана, или части макета, или отдельной кнопки в макете XML, используя темы или стили . Тем не менее, темы можно применять программно .
Существует также такая вещь, как a, StateListDrawable
которая позволяет вам определять разные чертежи для каждого состояния, в котором вы Button
можете находиться, будь то сфокусированный, выбранный, нажатый, отключенный и так далее.
Например, чтобы ваша кнопка меняла цвет при нажатии, вы можете определить XML-файл с именем res/drawable/my_button.xml
directory следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:drawable="@drawable/btn_pressed" />
<item
android:state_pressed="false"
android:drawable="@drawable/btn_normal" />
</selector>
Затем вы можете применить этот селектор к a Button
, установив свойство android:background="@drawable/my_button"
.
style
атрибут Android , но вы можете программно установить фон,Button
как вы можете с любым другим представлением, если этого будет достаточно. Кроме того, в качествеButton
наследования отTextView
можно изменять свойства текста. Просто посмотрите документацию по API для этих элементов ... developer.android.com/reference/android/view/…Прежде всего, вам не нужно использовать надувной макет для создания простой кнопки. Вы можете просто использовать:
Если вы хотите стилизовать кнопку, у вас есть 2 варианта: самый простой - просто указать все элементы в коде, как предлагают многие другие ответы:
Другой вариант - определить стиль в XML и применить его к кнопке. В общем случае
ContextThemeWrapper
для этого можно использовать :Чтобы изменить атрибуты, связанные с текстом, в TextView (или его подклассах, таких как Button), существует специальный метод:
Последний не может использоваться для изменения всех атрибутов; например, чтобы изменить отступы, вам нужно использовать
ContextThemeWrapper
. Но для цвета текста, размера и т. Д. Можно использоватьsetTextAppearance
.источник
Да, вы можете использовать, например, в кнопке
источник
Вы можете сделать такие атрибуты стиля:
на месте:
источник
Если вы используете библиотеку поддержки, вы можете просто использовать
для TextViews и кнопок. Аналогичные классы есть и для остальных видов :-)
источник
Для тех, кто ищет ответ по материалам, см. Этот пост SO: Раскрашивание кнопок в Android с помощью Material Design и AppCompat
Я использовал комбинацию этого ответа, чтобы установить белый цвет текста кнопки по умолчанию для моей кнопки: https://stackoverflow.com/a/32238489/3075340
Затем этот ответ https://stackoverflow.com/a/34355919/3075340, чтобы программно установить цвет фона. Код для этого:
your_colored_button
может быть просто обычнымButton
кнопкой или кнопкой AppCompat, если хотите - я протестировал приведенный выше код с обоими типами кнопок, и он работает.EDIT: я обнаружил, что устройства pre-lollipop не работают с приведенным выше кодом. См. Этот пост о том, как добавить поддержку устройств до леденца на палочке: https://stackoverflow.com/a/30277424/3075340
В основном это делают:
источник
В зависимости от того, какие атрибуты стиля вы хотите изменить, вы можете использовать библиотеку Paris:
Поддерживаются многие атрибуты, такие как background, padding, textSize, textColor и т. Д.
Отказ от ответственности: я создал библиотеку.
источник
Ответ @Dayerman и @h_rules правильный. Чтобы дать подробный пример с кодом, в папке с возможностью рисования создайте файл xml с именем button_disabled.xml
Затем в Java
Это отключит свойство кнопки и установит серебряный цвет.
[Цвет определяется в color.xml как:
источник
Во время выполнения вы знаете, какой стиль вы хотите, чтобы ваша кнопка имела. Итак, заранее в xml в папке макета вы можете иметь все готовые кнопки с нужными стилями. Итак, в папке макета у вас может быть файл с именем button_style_1.xml. Содержимое этого файла может выглядеть так:
Если вы работаете с фрагментами, то в onCreateView вы раздуваете эту кнопку, например:
где контейнер - это контейнер ViewGroup, связанный с методом onCreateView, который вы переопределяете при создании фрагмента.
Нужны еще две такие кнопки? Вы создаете их так:
Вы можете настроить эти кнопки:
Затем вы добавляете свои настраиваемые стилизованные кнопки в контейнер макета, который вы также раздули в методе onCreateView:
Вот так можно динамически работать со стилизованными кнопками.
источник
Я сделал для этого вспомогательный интерфейс, используя шаблон держателя.
Теперь для каждого стиля, который вы хотите использовать прагматично, просто реализуйте интерфейс, например:
Объявите styleable в вашем
attrs.xml
, styleable для этого примера:Вот стиль, заявленный в
styles.xml
:И наконец реализация держателя стиля:
Я нашел это очень полезным, так как его можно легко повторно использовать и сохранить код чистым и подробным, я бы рекомендовал использовать это только как локальную переменную, чтобы мы могли позволить сборщику мусора выполнять свою работу, как только мы закончим с настройкой всех стилей. .
источник
Недавно я столкнулся с той же проблемой. вот как я это решил.
Спасибо !
источник