setBackgroundTintList для кнопки программно с шестнадцатеричным значением / ColorDrawable

Я пытаюсь установить фоновый оттенок кнопки программно, не для цветового ресурса, как здесь, а вместо этого для шестнадцатеричного значения. В настоящее время я преобразовал шестнадцатеричное значение в ColorDrawable, но не знаю, как его использовать для установки оттенка фона с помощью .setBackgroundTintList() метод моей кнопки. Обратите внимание, что это делается во фрагменте, а контекст хранится в глобальной переменной mContext,

ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#FFFFFF"));

4 ответа

Решение

по API +21

btn.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#buttonColor")));

или Compat

         Drawable drawable = new ColorDrawable(Color.parseColor("color"));
         // Wrap the drawable so that future tinting calls work
         // on pre-v21 devices. Always use the returned drawable.
        drawable = DrawableCompat.wrap(drawable);


        DrawableCompat.setTint(drawable,Color.parseColor("colorTint"));
           //or tint list  
       //DrawableCompat.setTintList(drawable,ColorStateList.valueOf(Color.parseColor("#ffffff")));
        btn.setBackground(drawable); //apply drwable with tint to the ctn

Использование статических функций Compat:

ViewCompat.setBackgroundTintList(btn, ColorStateList.valueOf(Color.parseColor("#FFFFFF")));

Есть 2 способа:

1) получить имя цвета из color.xml

      .setBackgroundTintList(ColorStateList.valueOf(ResourcesCompat.getColor(
                        getResources(), R.color.your_color, null)));

2) с использованием шестнадцатеричной строки цвета

      .setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#color")));

Если вы хотите изменить цвет текстового представления на свой цвет, протестировано с Api 21 по 29

 ColorStateList colorStateList = ContextCompat.getColorStateList(context, R.color.yourColor);
  textView.setBackgroundTintList(colorStateList);
Другие вопросы по тегам