Как добавить программный оттенок

В новой библиотеке 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" /> 

Как я могу установить оттенок кнопки программно в моем коде? Я в основном пытаюсь реализовать условную окраску кнопки, основанной на некотором пользовательском вводе

Solutions Collecting From Web of "Как добавить программный оттенок"

Согласно документации, связанный с этим метод для 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 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); 

Вы можете найти больше в этом блоге (см. Раздел «Подтягиваемое тонирование»)

Вы пробовали что-то вроде этого?

 button.setBackgroundTintList(getResources().getColorStateList(R.id.blue_100)); 

Обратите внимание, что getResources () будет работать только в действии. Но это можно назвать и для каждого контекста.

Вы можете использовать DrawableCompat, например

 public static Drawable setTint(Drawable drawable, int color) { final Drawable newDrawable = DrawableCompat.wrap(drawable); DrawableCompat.setTint(newDrawable, color); return newDrawable; } 

У меня была аналогичная проблема. Я хотел окрасить сложный рисованный фон для представления, основанного на значении цвета (int). Мне удалось использовать код:

 ColorStateList csl = new ColorStateList(new int[][]{{}}, new int[]{color}); textView.setBackgroundTintList(csl); 

Где цвет – значение int, представляющее требуемый цвет. Это представляет собой простой xml ColorStateList:

 <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:color="color here"/> </selector> 

Надеюсь это поможет.

Похоже, что у представлений есть собственная механика для управления оттенком, поэтому лучше будет поместить список оттенков:

 ViewCompat.setBackgroundTintList( editText, ColorStateList.valueOf(errorColor)); 

Использование:

 favoriteImageButton.setColorFilter(Color.argb(255, 255, 255, 255)); // White Tint