设置ColorFilter按钮

时间:2016-04-28 10:55:47

标签: android android-layout android-drawable

我想为Button背景设置ColorFilter。这就是我所做的:

Drawable buttonBackground = ContextCompat.getDrawable(this, R.drawable.shape_rect_stroke);
buttonBackground.setColorFilter(ContextCompat.getColor(this, R.color
                .colorPrimary), PorterDuff.Mode.ADD);
btnSignIn.setBackground(buttonBackground);

shape_rect_stroke.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">


    <stroke
        android:width="1dp"
        android:color="@color/colorWhite"/>

    <solid android:color="@android:color/transparent"/>

</shape>

通过这样做,我得到了,

enter image description here

但我想要这个:

enter image description here

我的xml文件工作正常但我想实际更改stroke颜色,将solid颜色保持为透明。所以我可以使用相同的xml用于不同的颜色按钮背景...

请建议我怎样才能得到这个。 谢谢!

5 个答案:

答案 0 :(得分:1)

带边框的透明按钮,可在shape_rect_stroke.xml文件下方使用,对我有用:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape android:shape="rectangle">
        <!--apply button background transparent, full opacity-->
        <solid android:color="#00ffffff"/>
        <!--make button border solid color, nontransparent-->
        <stroke android:color="#ffffff" android:width="2dp"/>
        <corners android:radius="2dp"/>
    </shape>
  </item>
</selector>

如果您想以编程方式查看以下代码

  GradientDrawable gd = new GradientDrawable();
    gd.setColor(0x00FFFFFF); // Changes this drawbale to use a single color instead of a gradient
    gd.setCornerRadius(5);
    gd.setStroke(1, 0xFFFFFFFF);
    btnSignIn.setBackgroundDrawable(gd);

答案 1 :(得分:1)

试试这个,

findViewById(R.id.button).setBackground(setBackgroundDrawable("#3F51B5"));

创建设置描边颜色运行时间的方法:

private GradientDrawable setBackgroundDrawable(String strokeColor){
        GradientDrawable shape =  new GradientDrawable();

        shape.setStroke(2, Color.parseColor(strokeColor));
        shape.setColor(Color.parseColor("#80000000"));
        return  shape;
    }

答案 2 :(得分:0)

enter image description here

试试这个!它像魅力一样工作

设置按钮android:background =“@ drawable / shape”

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
    android:angle="270"
    android:endColor="@android:color/transparent"
    android:startColor="@android:color/transparent" />
<corners android:radius="3dp" />
<stroke
    android:width="5px"
    android:color="#03A9F4" />
</shape>

答案 3 :(得分:0)

最后我通过这样做完成了这个:

 GradientDrawable drawable = (GradientDrawable) btnSignIn.getBackground();
 drawable.setStroke(3, ContextCompat.getColor(this,R.color.colorPrimary));

答案 4 :(得分:0)

一切都很好。但只需要更改PorterDuff.Mode就可以正常工作,因为您已将其定义为PorterDuff.Mode.ADD。只需将其更改为PorterDuff.Mode.MULTIPLY即可。这是代码: -

Drawable buttonBackground = ContextCompat.getDrawable(this, R.drawable.shape_rect_stroke);
buttonBackground.setColorFilter(ContextCompat.getColor(this, R.color.colorPrimary), PorterDuff.Mode.MULTIPLY);
button.setBackground(buttonBackground);