Я использую библиотеку поддержки Android v21.
Я создал кнопку с пользовательским цветом фона. Эффекты дизайна материалов, такие как рябь, раскрытие, исчезли (за исключением повышения при нажатии), когда я использую фоновый цвет.
<Button
style="?android:attr/buttonStyleSmall"
android:background="?attr/colorPrimary"
android:textColor="@color/white"
android:textAllCaps="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Button1"
/>
Ниже приводится нормальная кнопка, и эффекты работают просто отлично.
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textAllCaps="true"
android:text="Button1"
/>
android
android-5.0-lollipop
Sathesh
источник
источник
Ответы:
Когда вы используете
android:background
, вы заменяете большую часть стиля и внешнего вида кнопки пустым цветом.Обновление: По состоянию на выпуске версии 23.0.0 от AppCompat , есть новый
Widget.AppCompat.Button.Colored
стиль , который использует вашу темуcolorButtonNormal
для инвалидов цвета иcolorAccent
для задействованного цвета.Это позволяет применить его к вашей кнопке напрямую через
Если вам нужен обычай
colorButtonNormal
илиcolorAccent
, вы можете использовать ,ThemeOverlay
как описано в этом про-наконечнике иandroid:theme
на кнопку.Предыдущий ответ
Вы можете использовать drawable в вашем каталоге v21 для вашего фона, таких как:
Это гарантирует, что цвет вашего фона будет
?attr/colorPrimary
и будет иметь анимацию пульсации по умолчанию с использованием?attr/colorControlHighlight
настроек по умолчанию (которые вы также можете установить в своей теме, если хотите).Примечание: вам придется создать пользовательский селектор для менее чем v21:
Предполагая, что у вас есть несколько цветов, которые вы хотели бы использовать для состояния по умолчанию, нажатия и фокусировки. Лично я снял скриншот пульсации на полпути, будучи выбранным, и вытащил из этого основное / сфокусированное состояние.
источник
Есть еще одно простое решение - создать собственный фон для «плоских» кнопок, сохраняя их «материальные» эффекты.
т.е.
Может использоваться для плоских кнопок, он работает с API> = 11, и вы получите эффект пульсации на> = 21 устройствах, сохраняя обычные кнопки до 21, пока AppCompat не будет обновлен для поддержки пульсации там.
Вы также можете использовать selectableItemBackgroundBorderless только для кнопок> = 21.
источник
CardView
подходе, спасибо, что поделились!Вот простой и обратно совместимый способ создания эффекта ряби для рельефных кнопок с пользовательским фоном.
Ваш макет должен выглядеть так
источник
foreground
он не действует до 23. google.com/…Я столкнулся с этой проблемой сегодня, фактически играя с библиотекой v22.
Предполагая, что вы используете стили, вы можете установить
colorButtonNormal
свойство, и кнопки будут использовать этот цвет по умолчанию.Помимо этого, вы все равно можете создать стиль для кнопки, а затем использовать ее для каждой кнопки, если вам нужен ассортимент цветов (не проверял, просто размышлял).
Не забудьте добавить
android:
перед именами элементов в вашем стиле v21 .источник
С AppCompat (22.1.1+) вы можете добавить такой стиль:
И используйте его, просто применив стиль:
Программно меняя цвет, я обнаружил, что единственный способ обновить цвет (в API 15 или 16) - это использовать «список оттенков фона». И это не удаляет хорошую радиальную анимацию на устройствах API 21:
Потому
button.setBackground(...)
иbutton.getBackground().mutate().setColorFilter(...)
не меняйте цвет кнопки на API 15 и 16, как на API 21.источник
ColorStateList.valueOf( ... )
для создания простогоColorStateList
только одного цвета.ViewCompat.setBackgroundTintList(myButton, ColorStateList.valueOf(myColor);
Javadoc дляsetSupportBackgroundTintList
говорит, что это должно быть названо так.Ответ @ ianhanniballake абсолютно правильный и простой. Но мне потребовалось несколько дней, чтобы понять. Для тех, кто не понимает его ответ, здесь более подробно реализация
=== Или ===
источник
colorButtonNormal
в базовой теме@style/AppTheme
. Это дает AppCompat цвет по умолчанию для соответствующей раскраски кнопок. И тогда можете использовать свой ответ на тему представления индивидуально.android:theme="Theme.MaterialButton"
илиandroid:theme="@style/Theme.MaterialButton"
android:theme="@style/Theme.MaterialButton"
. Спасибо за вашу правильность.Я использовал backgroundTint и передний план:
источник
Я пришел к этому сообщению в поисках способа получить цвет фона для моего
ListView
Предмета, но при этом сохранить пульсацию.Я просто добавил свой цвет в качестве фона и selectableItemBackground в качестве переднего плана:
и это работает как шарм. Я предполагаю, что та же самая техника могла бы использоваться и для кнопок. Удачи :)
источник
Используйте
backgroundTint
вместоbackground
источник
Если вы заинтересованы в ImageButton, вы можете попробовать эту простую вещь:
источник
v22.1
изappcompat-v7
представил некоторые новые возможности. Теперь можно назначить конкретную тему только одному представлению.Таким образом, вместо установки желаемого цвета в глобальной теме, мы создаем новую и назначаем ее только
Button
Пример:
И используйте этот стиль как тему вашего
Button
источник
Если вы в порядке с использованием сторонней библиотеки, посмотрите traex / RippleEffect . Это позволяет вам добавить эффект Ripple к ЛЮБОМ представлению с помощью всего лишь нескольких строк кода. Вам просто нужно обернуть в свой файл макета XML элемент, который вы хотите иметь эффект ряби с
com.andexert.library.RippleView
контейнером.В качестве дополнительного бонуса требуется Min SDK 9, так что вы можете иметь согласованность дизайна в разных версиях ОС.
Вот пример, взятый из репозитория GitHub библиотек:
Вы можете изменить цвет пульсации, добавив этот атрибут в элемент RippleView:
app:rv_color="@color/my_fancy_ripple_color
источник
использование
и цвет примет на pre-lolipop
источник
Алекс Локвуд объясняет два подхода: http://www.androiddesignpatterns.com/2016/08/coloring-buttons-with-themeoverlays-background-tints.html :
Подход № 1. Изменение цвета фона кнопки с использованием ThemeOverlay
Подход № 2. Установка фонового оттенка AppCompatButton
источник
Программно применяя цвета:
источник
Я попробовал это:
вместо изменения свойства фона. Это не снимает материальный эффект.
источник