До AppCompat
сегодняшнего обновления я смог изменить цвет кнопок в Android L, но не в старых версиях. После включения нового обновления AppCompat я не могу изменить цвет для любой версии, когда я пытаюсь попробовать кнопка просто исчезает. Кто-нибудь знает, как изменить цвет кнопки?
На следующих рисунках показано, чего я хочу достичь:
Белая кнопка по умолчанию, красная - то, что я хочу.
Это то, что я делал ранее, чтобы изменить цвет кнопок в styles.xml
:
<item name="android:colorButtonNormal">insert color here</item>
и сделать это динамически:
button.getBackground().setColorFilter(getResources().getColor(insert color here), PorterDuff.Mode.MULTIPLY);
Также я изменил родителя темы с @android:style/Theme.Material.Light.DarkActionBar
наTheme.AppCompat.Light.DarkActionBar
Ответы:
Официально исправлено в Библиотеке поддержки ред.22 (пт 13 марта 2015 г.). См. Соответствующую проблему кода Google:
https://issuetracker.google.com/issues/37008632
Пример использования
theme.xml:
v21 / theme.xml
источник
android:theme="@style/ColoredButton"
, а в styles.xml<style name="ColoredButton" parent="Widget.AppCompat.Button"> <item name="colorButtonNormal">@color/button_yellow</item> </style>
Изменить (22.06.2016):
Библиотека Appcompat начала поддерживать кнопки материалов после того, как я опубликовал исходный ответ. В этом посте вы можете увидеть простейшую реализацию поднятых и плоских кнопок.
Оригинальный ответ:
Поскольку этот AppCompat не поддерживает кнопку, вы можете использовать xml в качестве фона. Для этого я взглянул на исходный код Android и нашел соответствующие файлы для оформления кнопок материалов.
1 - Посмотрите на оригинальную реализацию материала кнопки из источника.
Взгляните на btn_default_material.xml в исходном коде Android .
Вы можете скопировать файл в папку вашего проекта drawable-v21. Но не трогай цвет здесь. Файл, который нужно изменить, является вторым файлом.
Drawable-V21 / custom_btn.xml
2 - Получить форму оригинального материала кнопкой
Как вы понимаете, внутри этого чертежа используется фигура, которую вы можете найти в этом файле исходного кода .
3 - Получение размеров кнопки материала
И в этом файле вы используете некоторые измерения из файла, который вы можете найти здесь . Вы можете скопировать весь файл и поместить в вашу папку значений . Это важно для применения одинакового размера (который используется в кнопках материала) ко всем кнопкам
4 - Создайте еще один нарисованный файл для старых версий
Для более старых версий у вас должен быть другой drawable с тем же именем. Я непосредственно помещаю пункты в линию вместо ссылки. Вы можете ссылаться на них. Но опять же, самое главное, это оригинальные размеры материала кнопки.
рисуем / custom_btn.xml
результат
Ваша кнопка будет иметь волновой эффект на устройствах Lollipop. Старые версии будут иметь точно такую же кнопку, кроме эффекта ряби. Но с тех пор, как вы предоставите рисованные элементы для разных состояний, они также будут реагировать на сенсорные события (как по старинке).
источник
Это было улучшено в v23.0.0 библиотеки AppCompat с добавлением большего количества тем, включая
Прежде всего, включите зависимость appCompat, если вы еще этого не сделали
теперь, так как вам нужно использовать v23 приложения-компата, вам также нужно будет использовать SDK-v23!
В твоем
values/theme
В твоем
values/style
В твоем
values-v21/style
Поскольку тема вашей кнопки основана на
Widget.AppCompat.Button.Colored
цвете текста на кнопке по умолчанию белый!но, кажется, есть проблема при отключении кнопки, кнопка изменит свой цвет на светло-серый, но цвет текста останется белым!
Обходной путь для этого - специально установить цвет текста на кнопке белым! как я сделал в стиле, показанном выше.
теперь вы можете просто определить свою кнопку и позволить AppCompat сделать все остальное :)
Государство с ограниченными возможностями
Включенное состояние
Редактировать:
Добавить
<Button android:theme="@style/BrandButtonStyle"/>
источник
<Button android:theme="@style/BrandButtonStyle"/>
. Он должен бытьtheme
атрибутом и неstyle
атрибут.В библиотеке поддержки Android 22.1.0 Google сделал
Button
тонировку. Итак, еще один способ настроить цвет фона кнопки - это использоватьbackgroundTint
атрибут.Например,
источник
Для поддержки цветных кнопок используйте последнюю библиотеку AppCompat (> 23.2.1 ) с:
AppCompat Widget:
Стиль AppCompat:
NB! Чтобы установить собственный цвет в xml: используйте attr:
app
вместоandroid
(использовать
alt+enter
или объявитьxmlns:app="http://schemas.android.com/apk/res-auto"
для использованияapp
)приложение : backgroundTint = "@ color / your_custom_color"
Пример:
источник
С последней версией библиотеки поддержки вы можете просто унаследовать вашу активность
AppCompatActivity
, поэтому она будет раздувать вашButton
asAppCompatButton
и даст вам возможность стилизовать цвет каждой кнопки на макете с помощью ofandroid:theme="@style/SomeButtonStyle"
, гдеSomeButtonStyle
:Работал у меня в 2.3.7, 4.4.1, 5.0.2
источник
android:theme
и нетstyle
. Вы также можете добавитьcolorControlHighlight
иcolorControlActivated
.Theme.AppCompat.Light
вместо этого.если вы хотите ниже стиля
добавить этот стиль вашей кнопки
если вы хотите этот стиль
добавить код ниже
источник
compile 'com.android.support:appcompat-v7:23.1.0'
Вы должны добавить.Ответ в ТЕМЕ, а не в стиле
Проблема в том, что цвет кнопки соответствует цвету кнопки нормального темы. Я пытался изменить стиль разными способами, но безуспешно. Поэтому я изменил тему кнопки .
Создайте тему с помощью colorButtonNormal и colorPrimary:
Используйте эту тему в кнопке
«AppTheme.Button» может быть любой вещью, расширяющей стиль кнопки, как здесь, я использую основной цвет для цвета текста:
И вы получите кнопку в любом цвете, который вы хотите, который совместим с дизайном материала.
источник
Я только что создал библиотеку Android, которая позволяет легко изменять цвет кнопки и цвет пульсации
https://github.com/xgc1986/RippleButton
Вам не нужно создавать стиль для каждой кнопки, которую вы хотите, с другим цветом, что позволяет настраивать цвета случайным образом
источник
эта работа для меня с appcompat-v7: 22.2.0 в Android + 4.0
в вашем styles.xml
в вашем файле макета
источник
Планировка:
styles.xml:
цвет / button_background_selector.xml:
цвет / button_text_selector.xml:
источник
Для тех, кто использует
ImageButton
вот как вы это делаете:В style.xml:
в v21 / style.xml:
Тогда в вашем файле макета:
источник
Если вы используете стилевое решение с colorButtonNormal , не забудьте наследовать от Widget.AppCompat.Button.Colored чтобы эффект ряби работал;)
подобно
источник
Еще одно простое решение с использованием AppCompatButton
источник
Использование:
Или даже :
и это даст пользовательский цвет кнопки.
источник
Если вам нужна только кнопка «Плоский» материал, вы можете настроить их фон, используя атрибут selectableItemBackground, как описано здесь .
источник
Чтобы изменить цвет одной кнопки
источник
Для меня проблема заключалась в том, что в Android 5.0 это не
android:colorButtonNormal
имело никакого эффекта, и фактически ни один элемент из темы (напримерandroid:colorAccent
), но в Android 4.4.3, например, не делал. Проект был настроен сcompileSdkVersion
иtargetSdkVersion
на 22, поэтому я внес все изменения как @Muhammad Alfaifi sugessted, но в конце я заметил, что проблема заключалась в buildToolsVersion , который не был обновлен. Как только я перешел на 23.0.1 , все начинает работать почти как обычно. Теперь, по-android:colorButtonNormal
прежнему не имеет никакого эффекта, но, по крайней мере, кнопка реагирует наandroid:colorAccent
, что для меня приемлемо.Я надеюсь, что этот намек может кому-то помочь. Примечание: я применил стиль непосредственно к кнопке, поскольку кнопка
android:theme=[...]
также не имела эффекта.источник
Один из способов сделать это позволяет вам указать на стиль, а НЕ на тему ВСЕХ кнопок в вашем приложении.
В themes.xml добавить тему
Сейчас в styles.xml добавлю
Теперь в вашем макете просто укажите СТИЛЬ в вашей кнопке
источник
ОБНОВИТЬ
Используйте библиотеку поддержки дизайна (23.2.0) и appcompatwidgets, как показано ниже
В библиотеке поддержки Android 22.1 :
Полный список виджетов с оттенком:
Дизайн материала для устройств перед леденцом на палочке :
источник
Если вы хотите использовать стиль AppCompat, такой как Widget.AppCompat.Button , Base.Widget.AppCompat.Button.Colored и т. Д., Вам необходимо использовать эти стили с совместимыми представлениями из библиотеки поддержки.
Приведенный ниже код не работает для устройств, предшествующих lolipop:
Вам необходимо использовать AppCompatButton для включения стилей AppCompat:
источник
ImageView
заменяется на,AppCompatImageView
и это должно быть то же самое со всеми виджетами, которые имеют соответствующуюAppCompat
версию.android.support.v7.widget.AppCompatImageView
явно.last target version
@power?Я использую это. Эффект ряби и работа тени при нажатии кнопки.
style.xml
Кнопка на макете:
источник
Я на самом деле не хотел изменений в моих пользовательских стилях кнопок, но, к сожалению, они больше не работали.
У моего приложения minSdkVersion 9, и все работало раньше.
Я не знаю почему, но так как я удалил андроид: до buttonStyle, кажется, снова работает
сейчас = работает:
<item name="buttonStyle">@style/ButtonmyTime</item>
до = только серые кнопки материала:
<item name="android:buttonStyle">@style/ButtonmyTime</item>
У меня нет специальной папки для новой версии Android, так как мои кнопки довольно плоские, и они должны выглядеть одинаково на всех версиях Android.
Может быть, кто-то может сказать мне, почему я должен был удалить «android:» ImageButton все еще работает с «android:»
источник
После 2 дней поиска ответов у меня не работала тема кнопок в API <21.
Мое единственное решение состоит в том, чтобы переопределить тонирование AppCompatButton не только с основной темой приложения "colorButtonNormal", но и с видом backgroundTint следующим образом:
Затем вы можете определить свой цвет кнопки следующим образом:
источник
Этот ТАК ответ помог мне прийти к ответу https://stackoverflow.com/a/30277424/3075340
Я использую этот метод утилиты, чтобы установить фоновый оттенок кнопки. Работает с устройствами перед леденцом на палочке:
Как использовать в коде:
Таким образом, вам не нужно указывать ColorStateList, если вы просто хотите изменить оттенок фона и ничего более, кроме того, чтобы поддерживать приятные эффекты кнопок, а что нет.
источник
Я поставил
android:textColor
на@null
мне кнопку темы , и это помогает.styles.xml
some_layout.xml
Теперь цвет текста кнопки
colorAccent
определяется вAppTheme
источник
Если вы используете kotlin, вы можете видеть, что все атрибуты из MaterialButton поддерживаются. Не используйте атрибут android: background. MaterialButton управляет своим собственным фоном, который можно нарисовать, а установка нового фона означает, что цвет кнопки «Отключить материал» больше не может гарантировать правильную работу новых атрибутов, которые он вводит. Если фон по умолчанию изменен, Material Button не может гарантировать четкое поведение. На MainActivity.kt
На Activity_main.xml
ресурс: Пример изменения цвета кнопки материала
источник
если вы хотите сделать это с помощью кода любого цвета, используйте это:
источник