我想为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>
通过这样做,我得到了,
但我想要这个:
我的xml文件工作正常但我想实际更改stroke
颜色,将solid
颜色保持为透明。所以我可以使用相同的xml用于不同的颜色按钮背景...
请建议我怎样才能得到这个。 谢谢!
答案 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)
设置按钮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);