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

3
我正在使用以下代码更改按钮的BackgroundTintList属性。
myButton.setBackgroundTintList(getColorStateList(R.color.green));

因此,我的按钮从灰色变为绿色,这就是我想要实现的效果。

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

ColorStateList buttonBackgroundTint = myButton.getBackgroundTintList();

一旦我将BackgroundTintList设置为绿色,将其设置为NULL会使我的按钮变成白色,而不是其默认的灰色。

如何将我的按钮再次设置为灰色呢?


尝试将按钮的背景颜色设置为0。 - Amir
4个回答

8
你可以尝试这条命令行:
myButton.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#d8d8d8")));

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


这个技术性地回答了我的问题,谢谢。尽管如此,我还会继续寻找通用解决方案,因为如果默认色调与此不同,则颜色常量再次不同。 - Istvanb

4

我没有找到任何简单的方法来做到这一点。我能够实现你的目标的唯一方式是保留原始背景Drawable,创建它的克隆,手动着色克隆,然后在这些新的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) 来在两者之间切换。


旧答案,但非常感谢。我认为这应该是正确的答案,因为它似乎可以正确地存储和恢复您拥有的按钮的原始设置,并尝试使用来自某些侧渠道的一些信息重写它们! - TheRealISA

0
我刚刚创建了一个新的Button并获取了backgroundTintList
actionSearch.backgroundTintList = MaterialButton(requireContext()).backgroundTintList

0

如果你想添加自定义颜色

view.backgroundTintList = ColorStateList.valueOf(getColor(context, R.color.color)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接