Как добавить оттенок кнопки программно
в новой библиотеке 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"
/>
Как я могу установить оттенок кнопки программно в моем коде?
Я в основном пытаюсь реализовать условную окраску кнопки на основе некоторого пользовательского ввода.
9 ответов:
по словам документация соответствующий метод
android:backgroundTint- это setBackgroundTintList (список ColorStateList)обновление
следуйте за этим ссылке чтобы узнать, как создать ресурс списка состояний цвета.
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:color="#your_color_here" /> </selector>затем загрузите его с помощью
setBackgroundTintList(contextInstance.getResources().getColorStateList(R.color.your_xml_name));здесь
contextInstanceэкземплярContext
С помощью AppCompart
btnTag.setSupportButtonTintList(ContextCompat.getColorStateList(Activity.this, R.color.colorPrimary));
вы могли бы использовать
button.setBackgroundTintList(ColorStateList.valueOf(resources.getColor(R.id.blue_100)));но я бы рекомендовал вам использовать библиотеку поддержки drawable tinting, которая только вчера была выпущена:
Drawable drawable = ...; // Wrap the drawable so that future tinting calls work // on pre-v21 devices. Always use the returned drawable. drawable = DrawableCompat.wrap(drawable); // We can now set a tint DrawableCompat.setTint(drawable, Color.RED); // ...or a tint list DrawableCompat.setTintList(drawable, myColorStateList); // ...and a different tint mode DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_OVER);Вы можете найти более в этой статье (см. раздел "Рисование тонировки")
похоже, что views имеет собственную механику для управления оттенком, поэтому лучше будет поставить список оттенков:
ViewCompat.setBackgroundTintList( editText, ColorStateList.valueOf(errorColor));
при правильном расширении ответа dimsuz путем предоставления реальной ситуации кода см. следующий фрагмент кода:
Drawable buttonDrawable = button.getBackground(); buttonDrawable = DrawableCompat.wrap(buttonDrawable); //the color is a direct color int and not a color resource DrawableCompat.setTint(buttonDrawable, Color.RED); button.setBackground(buttonDrawable);Это решение предназначено для сценария, в котором в качестве фона кнопки используется drawable. Он также работает на устройствах pre-Lollipop.
вы можете использовать DrawableCompat например
public static Drawable setTint(Drawable drawable, int color) { final Drawable newDrawable = DrawableCompat.wrap(drawable); DrawableCompat.setTint(newDrawable, color); return newDrawable; }
вы пробовали что-то подобное?
button.setBackgroundTintList(getResources().getColorStateList(R.id.blue_100));обратите внимание, что getResources() будет работать только в деятельности. Но его можно вызвать и в любом контексте.
у меня была похожая проблема. Я хотела бы цвет сложный выигрышного фона для представления на основе цвета (int значение). Мне удалось с помощью кода:
ColorStateList csl = new ColorStateList(new int[][]{{}}, new int[]{color}); textView.setBackgroundTintList(csl);где color-это значение int, представляющее требуемый цвет. Это представляет собой простой xml ColorStateList:
<selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:color="color here"/> </selector>надеюсь, что это помогает.
способ, которым мне удалось заставить меня работать, был с помощью
CompoundButtonCompat.setButtonTintList(button, colour).в моем понимании это работает независимо от версии Android.
для ImageButton вы можете использовать:
favoriteImageButton.setColorFilter(Color.argb(255, 255, 255, 255)); // White Tint
Comments