В новой библиотеке AppCompat мы можем подкрасить кнопку следующим образом:
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/follow"
android:id="@+id/button_follow"
android:backgroundTint="@color/blue_100"
/>
Как программно установить оттенок кнопки в моем коде? Я в основном пытаюсь реализовать условную окраску кнопки на основе некоторого пользовательского ввода.
android
android-appcompat
Stephane
источник
источник
Ответы:
Согласно документации связанный метод
android:backgroundTint
- setBackgroundTintList (список ColorStateList)Обновить
Перейдите по этой ссылке, чтобы узнать, как создать ресурс списка состояний цвета.
затем загрузите его, используя
где
contextInstance
экземплярContext
используя AppCompart
источник
ViewCompat.setBackgroundTintList(View, ColorStateList)
его можно использовать вплоть до API 4. Но он работаетTintableBackgroundView
, например, только для представлений, которые реализуютAppCompatButton
(вместо обычныхButton
).ViewCompat.setBackgroundTintList(View, ColorStateList)
, как предложил @Jon Adams, имеет еще больше смысла, поскольку View.setSupportButtonTintList ограниченRestrictTo
аннотациями. Подробности здесь: developer.android.com/reference/android/support/annotation/…Вы могли бы использовать
Но я бы порекомендовал вам использовать раскрашивание библиотеки поддержки, которое только что было выпущено вчера:
Вы можете найти больше в этом сообщении в блоге (см. Раздел «Рисуемая тонировка»).
источник
Похоже, что у представлений есть собственная механика управления оттенками, поэтому лучше будет поместить список оттенков:
источник
Чтобы правильно расширить ответ dimsuz, предоставив реальную ситуацию кода, см. Следующий фрагмент кода:
Это решение предназначено для сценария, когда в качестве фона кнопки используется рисованный объект. Он также работает на устройствах до Lollipop.
источник
Вы пробовали что-то подобное?
обратите внимание, что getResources () будет работать только в действии. Но его тоже можно вызвать в любом контексте.
источник
вот как это сделать в котлине:
источник
Вы можете использовать DrawableCompat, например
источник
это легко обрабатывается в новой кнопке материала из библиотеки дизайна материалов, сначала добавьте зависимость:
затем в своем XML используйте это для своей кнопки:
и если вы хотите изменить цвет, вот код в Kotlin, он не устарел и может использоваться до Android 21:
источник
Мне удалось заставить свою работать с помощью
CompoundButtonCompat.setButtonTintList(button, colour)
.Насколько я понимаю, это работает независимо от версии Android.
источник
У меня была похожая проблема. Я хотел раскрасить сложный фон для рисования на основе значения цвета (int). Мне удалось использовать код:
Где цвет - это значение типа int, представляющее требуемый цвет. Это представляет собой простой xml ColorStateList:
Надеюсь это поможет.
источник
ColorStateList.valueOf(ColorInt)
Для ImageButton вы можете использовать:
источник
Если вы используете
Kotlin
иMaterial Design
, вы можете изменить свой цветMaterialButton
следующим образом:Вы можете улучшить его еще лучше, создав для себя функцию расширения
MaterialButton
, чтобы код был более читабельным, а кодирование - немного более удобным:Затем вы можете использовать свою функцию везде следующим образом:
источник
В дополнение к ответу Shayne3000 вы также можете использовать ресурс цвета (не только цвет int). Версия Котлина :
источник
Предлагаемый здесь ответ не работает должным образом на android 5.0, если ваш список состояний цвета на основе XML ссылается на тематические атрибуты. Например, у меня есть список состояний цвета xml, например:
Использование этого в качестве фона из xml отлично работает на Android 5.0 и всем остальном. Однако, если я попытаюсь установить это в таком коде:
(Не делай этого)
На самом деле не имеет значения, передаю ли я Activity или контекст кнопки методу ContextCompat.getColorStateList (), ни один из них не даст мне правильный список состояний цвета по отношению к теме, внутри которой находится кнопка. Это связано с тем, что использование атрибутов темы в списках состояний цвета не поддерживалось до тех пор, пока api 23 и ContextCompat не сделали ничего особенного для их решения. Вместо этого вы должны использовать AppCompatResources.getColorStateList (), который выполняет свой собственный синтаксический анализ ресурсов / разрешение атрибутов темы на устройствах <API 23.
Вместо этого вы должны использовать это:
TL; DR : используйте AppCompatResources, а не -ContextCompat-, если вам понадобятся разрешенные тематические ресурсы во всех версиях API Android.
Дополнительные сведения по теме см. В этой статье .
источник