如何将按钮的BackgroundTintList设置为默认值?

时间:2019-01-02 19:50:54

标签: java android button

我在下面一行中更改按钮的BackgroundTintList属性。

myButton.setBackgroundTintList(getColorStateList(R.color.green));

结果,我的按钮将其颜色从灰色更改为绿色,这就是我想要实现的目标。

我的问题是,稍后我想重新设置按钮的原始灰色,但是我不知道该怎么做。我试图在代码的开头(在更改它之前)获取按钮的BackgroundTintList属性,但是以下行返回NULL

ColorStateList buttonBackgroundTint = myButton.getBackgroundTintList();

将BackgroundTintList设置为绿色后,将其设置为NULL会将我的按钮更改为白色,而不是默认的灰色。

将按钮再次设置为灰色的方式是什么?

3 个答案:

答案 0 :(得分:1)

您可以尝试以下行:

myButton.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#d8d8d8")));

如果您想将按钮的颜色改回其默认/原始颜色。

答案 1 :(得分:0)

我还没有找到轻松实现此目的的任何方法。我可以完成目标的唯一方法是保留原始背景Drawable,为其创建一个副本,手动为该副本着色,然后在这些新的可绘制对象之间来回交换。

private Drawable original;
private Drawable tinted;

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...

    this.original = button.getBackground();
    this.tinted = button.getBackground().getConstantState().newDrawable().mutate();

    ColorStateList custom = getResources().getColorStateList(R.color.my_button, getTheme());
    tinted.setTintList(custom);

    ...
}

然后,我可以写button.setBackground(original)button.setBackground(tinted)在两者之间交换。

答案 2 :(得分:0)

我刚刚创建了一个新的Button并获得了backgroundTintList

actionSearch.backgroundTintList = MaterialButton(requireContext()).backgroundTintList