我有这个round_button.xml
文件:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@color/colorPrimary"></solid>
<corners android:radius="3dp"></corners>
</shape>
</item>
</selector>
我使用那个drawable来获取我的两个按钮:
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/Button_Register"
android:background="@drawable/round_button"
android:textColor="@color/formLabelTextColor"
android:text="@string/loginform_buttonregister" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/Button_Login"
android:background="@drawable/round_button"
android:textColor="@color/komWhite"
android:text="@string/loginform_buttonlogin" />
我的问题是......
如何在java中更改Button_Register
背景颜色?我试着用这个:
Button button_register = (Button) findViewById(R.id.Button_Register);
button_register.setBackgroundColor(R.color.formBackgroundColor);
并删除可绘制的形状。我只是想改变那个特定按钮的颜色。但怎么样?
谢谢。答案 0 :(得分:4)
public static void setDrawableFilterColor(Context context, int colorResource, Drawable drawable) {
//noinspection ResourceType
int filterColor = Color.parseColor(context.getResources().getString(colorResource));
drawable.setColorFilter(new PorterDuffColorFilter(filterColor, PorterDuff.Mode.MULTIPLY));
}
并用
调用它setDrawableFilterColor(mContext, R.color.colorPrimary, button_register.getBackground())
答案 1 :(得分:3)
您只需使用GradientDrawable
这样的
GradientDrawable gradientDrawable = (GradientDrawable)button_register.getBackground();
gradientDrawable.setColor(R.color.formBackgroundColor);
答案 2 :(得分:2)
在选择器文件中的shape属性上设置drawable颜色,如下所示
<item android:drawable="@color/yourcolor">
完整代码
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/black">
<shape android:shape="rectangle">
<solid android:color="@color/colorPrimary"></solid>
<corners android:radius="3dp"></corners>
</shape>
</item>
</selector>
答案 3 :(得分:0)
您可以通过在运行时使用您需要的颜色创建drawable来实现此目的。以下代码将帮助您以编程方式绘制 -
Button button = (Button) findViewById(R.id.btn_login);
final GradientDrawable gradientDrawable = new GradientDrawable();
gradientDrawable.setShape(GradientDrawable.RECTANGLE);
gradientDrawable.setCornerRadius(10);
gradientDrawable.setColor(Color.BLUE);
button.setBackground(gradientDrawable);
希望它对你有所帮助。
答案 4 :(得分:0)
根据sasikumar的答案,这是可用于按钮的矩形代码,请注意:
<solid android:color="@color/colorWhite"></solid>
drawable的完整代码为:
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/button_square">
<stroke android:width="1dp" android:color="#3f3f44" />
<padding android:left="2dp"
<solid android:color="@color/colorWhite"></solid>
android:top="2dp"
android:right="2dp"
android:bottom="2dp" />
<corners android:radius="10dp" />
</shape>
这就是我的实现方式:
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginEnd="5dp"
android:background="@drawable/buttonsquare"
android:text="Button text"
android:layout_marginStart="5dp">
</Button>