如何在android中以编程方式更改api level 23下面的按钮的可绘制色调

时间:2017-04-14 07:59:29

标签: android android-drawable android-button

我试图弄清楚如何以编程方式更改按钮的drawableLeft / drawableRight的颜色。我在我的xml中使用了drawable tint,如下所述,其工作原理> 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 个答案:

答案 0 :(得分:3)

以下是为TextView或Button 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);
            }
        }
    }

答案 1 :(得分:3)

如果您更喜欢使用 XML 代码而不是 JAVA,您可以将 android:drawableTint 属性更改为 app:drawableTint

答案 2 :(得分:0)

您正在使用PorterDuff.Mode.MULTIPLY,因此您正在增加颜色。假设(可绘制的名称)您的图标为黑色 - #000000int,它将为0。那么0 * GRAY(或任何其他颜色)总会给你0,所以还是黑...

尝试其他PorterDuff.Mode,例如PorterDuff.Mode.SRC_ATOPPorterDuff.Mode.SRC_IN

您当前的代码可能会使用白色版本的图标,该图标应使用MULTIPLY正确填充

答案 3 :(得分:0)

对于Kotlin,这对我有用

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

或者,如果您使用资源

your_view.setColorFilter(ContextCompat.getColor(this.baseContext, R.color.colorPrimary), PorterDuff.Mode.SRC_ATOP)

答案 4 :(得分:0)

_BTNCancel.getBackground().setAlpha(128);

它将使按钮或任何视图的色彩变为50%