Как программно изменить оттенок кнопки ниже уровня API 23 на Android

Я пытаюсь понять, как программно изменить цвет drawableLeft/drawableRight кнопки. Я использовал оттягиваемый оттенок в моем xml, как упомянуто ниже, который работает> уровень API 23, но не могу изменить цвет <уровень API 23

 <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="VIEW ALL"
                android:layout_centerInParent="true"
                android:background="#00000000"
                android:drawableLeft="@mipmap/ic_menu_black_36dp"
                android:layout_centerVertical="true"
                android:id="@+id/view_all"
                android:textColor="@color/bottom_color"
                android:drawableTint="@color/bottom_color"
                />
      Button  prev = (Button) findViewById(R.id.prev);

   Drawable[] drawables  =prev.getCompoundDrawables();
         drawables[0].setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY);
        prev.setCompoundDrawables(drawables[0],null,null,null);

Решение:

 Drawable[] drawablesprev  =prev.getCompoundDrawables();

//for drawableleft drawable array index 0  

  drawablesprev[0].setColorFilter(getResources().getColor(R.color.assessment_bottom), PorterDuff.Mode.SRC_ATOP);

//for drawableright drawable array index 2  
drawablesprev[2].setColorFilter(getResources().getColor(R.color.assessment_bottom), PorterDuff.Mode.SRC_ATOP);


//for drawabletop drawable array index 1
  drawablesprev[1].setColorFilter(getResources().getColor(R.color.assessment_bottom), PorterDuff.Mode.SRC_ATOP);

5 ответов

Решение

Ты используешь PorterDuff.Mode.MULTIPLYтак что вы умножаете цвета. при условии (имя вашего рисования) ваш значок черный - #000000 или как int это будет 0, затем 0 * GRAY (или любой другой цвет) всегда даст вам 0так еще черный...

попробуй другой PorterDuff.Modes, например PorterDuff.Mode.SRC_ATOP или же PorterDuff.Mode.SRC_IN

Ваш текущий код, вероятно, будет работать с белой версией иконки, которая должна быть MULTIPLY

Вот быстрый способ подкрасить ваш TextView или кнопку Drawable:

  private void tintViewDrawable(TextView view) {
        Drawable[] drawables = view.getCompoundDrawables();
        for (Drawable drawable : drawables) {
            if (drawable != null) {
                drawable.setColorFilter(getResources().getColor(R.color.colorPrimary), PorterDuff.Mode.SRC_ATOP);
            }
        }
    }

Если вы предпочитаете использовать XML -код вместо JAVA , вы можете изменить android:drawableTintприписывать app:drawableTint.

Для котлина это работает для меня

your_view.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP)

Или если вы используете ресурс

your_view.setColorFilter(ContextCompat.getColor(this.baseContext, R.color.colorPrimary), PorterDuff.Mode.SRC_ATOP)
_BTNCancel.getBackground().setAlpha(128);

это сделает кнопку или любой вид 50% оттенком

Другие вопросы по тегам