Я бы хотел немного изменить цвет стандартной кнопки Android, чтобы лучше соответствовать брендингу клиента.
Наилучший способ, который я нашел для этого, - это поменять Button
объект рисования на рисунок, расположенный в res/drawable/red_button.xml
:
<?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/red_button_pressed" />
<item android:state_focused="true" android:drawable="@drawable/red_button_focus" />
<item android:drawable="@drawable/red_button_rest" />
</selector>
Но для этого требуется, чтобы я фактически создал три разных рисования для каждой кнопки, которую я хочу настроить (один для кнопки в состоянии покоя, один для фокусировки и один для нажатия). Это кажется более сложным и не СУХИМ, чем мне нужно.
Все, что я действительно хочу сделать, это применить какое-то цветовое преобразование к кнопке. Есть ли более простой способ изменить цвет кнопки, чем я?
android
android-layout
emmby
источник
источник
Ответы:
Я обнаружил, что все это можно сделать одним файлом довольно легко. Поместите что-то вроде следующего кода в файл с именем,
custom_button.xml
а затем установитеbackground="@drawable/custom_button"
в виде кнопок:источник
"Error: No resource found that matches the given name (at 'color' with value '@color/yellow1')"
эти ссылки на встроенные цвета? кажется, мне нужен res / values / color.xml, чтобы сделать эту работуСледуя ответу Томаша, вы также можете программно установить оттенок всей кнопки, используя режим умножения PorterDuff. Это изменит цвет кнопки, а не только оттенок.
Если вы начинаете со стандартной серой затененной кнопки:
даст вам красную затененную кнопку,
даст вам зеленую кнопку и т.д., где первое значение - это цвет в шестнадцатеричном формате.
Это работает путем умножения текущего значения цвета кнопки на ваше значение цвета. Я уверен, что с этими режимами можно сделать гораздо больше.
источник
import android.graphics.PorterDuff;
Майк, тебя могут заинтересовать цветовые фильтры.
Пример:
попробуйте это, чтобы получить цвет, который вы хотите.
источник
Это мое решение, которое отлично работает, начиная с API 15 . Это решение сохраняет все эффекты нажатия кнопок по умолчанию, такие как материал
RippleEffect
. Я не тестировал его на более низких API, но он должен работать.Все, что вам нужно сделать, это:
1) Создайте стиль, который меняется только
colorAccent
:2) Добавьте эти две строки в ваш
button
виджет:Пример кнопки виджета
источник
colorAccent
влияет не только на фон кнопки.Теперь Вы можете также использовать AppCompat-V7 в AppCompatButton с
backgroundTint
атрибутом:источник
app:backgroundTint
вместоandroid:backgroundTint
использования AppCompat.Мне нравится предложение цветового фильтра в предыдущих ответах от @conjugatedirection и @Tomasz; Однако я обнаружил, что предоставленный код не так легко применяется, как я ожидал.
Во-первых, не было указано, где применять и очищать цветной фильтр. Возможно, есть и другие хорошие места для этого, но то, что мне пришло в голову, это OnTouchListener .
Из моего прочтения исходного вопроса, идеальным решением было бы то, которое не включает никаких изображений. Принятый ответ с использованием custom_button.xml от @emmby, вероятно, лучше подходит, чем цветовые фильтры, если это ваша цель. В моем случае я начинаю с png-изображения от дизайнера пользовательского интерфейса того, как должна выглядеть кнопка. Если я установлю фон кнопки на это изображение, обратная связь по умолчанию будет полностью потеряна. Этот код заменяет это поведение программным эффектом затемнения.
Я извлек это как отдельный класс для приложения к нескольким кнопкам - показанный как анонимный внутренний класс, чтобы понять идею.
источник
Если вы создаете цветные кнопки с помощью XML, вы можете сделать код немного чище, указав сфокусированное и нажатое состояние в отдельном файле и повторно их использовать. Моя зеленая кнопка выглядит так:
источник
Самое короткое решение, которое работает с любой версией Android:
Примечания / Требования :
app:
пространство имен и неandroid:
пространство имен!версия приложения> 24.2.0
dependencies {compile 'com.android.support:appcompat-v7:25.3.1'}
Пояснение :
источник
app:backgroundTint="@color/my_color"
не получилось.android:backgroundTint="@color/my_color"
работал отлично, хотя.Я использую этот подход
style.xml
Как вы можете видеть сверху, я использую собственный стиль для моей кнопки. Цвет кнопки соответствует цвету акцента. Я считаю, что это гораздо лучший подход, чем настройка, так
android:background
как я не потеряю волновой эффект, который обеспечивает Google.источник
Теперь есть гораздо более простой способ: android-holo-colors.com
Это позволит вам легко менять цвета всех голографических рисунков (кнопок, блесен, ...). Вы выбираете цвет, а затем загружаете ZIP-файл, содержащий рисунки для всех разрешений.
источник
Используйте это таким образом:
источник
В
<Button>
использованииandroid:background="#33b5e5"
. или лучшеandroid:background="@color/navig_button"
источник
В библиотеке компонентов DroidUX есть
ColorButton
виджет, цвет которого можно легко изменять как с помощью определения xml, так и программно во время выполнения, так что вы даже можете позволить пользователю установить цвет / тему кнопки, если ваше приложение это позволяет.источник
Вы также можете использовать этот онлайн-инструмент для настройки своей кнопки http://angrytools.com/android/button/ и использовать ее
android:background="@drawable/custom_btn"
для определения настраиваемой кнопки в макете.источник
Вы можете установить тему вашей кнопки на это
источник
Самый простой способ - просто определить пользовательский класс Button, который принимает все свойства, которые вам нужны, такие как радиус, градиент, цвет нажатия, нормальный цвет и т. Д., А затем просто использовать это в макетах XML вместо настройки фона с помощью XML. Образец здесь
Это очень полезно, если у вас много кнопок с такими же свойствами, как радиус, выбранный цвет и т. Д. Вы можете настроить свою унаследованную кнопку для обработки этих дополнительных свойств.
Результат (не использовался селектор фона).
Обычная кнопка
Нажатая кнопка
источник
Способ, которым я делаю другую стилизованную кнопку, которая работает достаточно хорошо, - это создать подкласс объекта Button и применить цветовой фильтр. Это также обрабатывает включенные и отключенные состояния, применяя альфа к кнопке.
источник
значения \ styles.xml
тогда:
источник
В соответствии с рекомендациями по дизайну материала, вы должны использовать стиль, как показано ниже
и в макете добавьте это свойство к вашей кнопке
источник
Это просто .. добавить эту зависимость в ваш проект и создать кнопку с 1. Любая форма 2. Любой цвет 3. Любая граница 4. С эффектами материала
https://github.com/manojbhadane/QButton
источник