gpt4 book ai didi

android - 使用 Android 5 以编程方式更改一种 EditText 颜色会更改整个应用程序中的 EditText 颜色

转载 作者:搜寻专家 更新时间:2023-11-01 08:43:03 25 4
gpt4 key购买 nike

我在 Android 5 中遇到了一个非常奇怪的问题。如果用户输入错误,我想将错误设置为 edittext 并将其颜色更改为红色,当用户开始输入内容时,我想将颜色更改回绿色。我是这样做的:

eText.setError(message);
eText.getBackground().setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);
eText.addTextChangedListener(new TextWatcher() {


@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
eText.getBackground().setColorFilter(
ctx.getResources().getColor(R.color.dark_green), PorterDuff.Mode.SRC_ATOP);
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {}

@Override
public void afterTextChanged(Editable s) {}
});

在低于 5 的 android 版本中,一切都完美无缺,但在 Lollipop 中则不然。如果我更改一种编辑文本颜色,则所有应用程序中的所有编辑文本都会更改它的颜色。有什么办法可以解决这个奇怪的事情吗?或者它是一些我不知道的 Material 设计和 Android 5 技巧?

最佳答案

问题是背景 Drawable 在许多 View 中重复使用。为确保 Drawable 不在多个 View 之间共享,您应该使用 mutate 方法。

参见:mutate()

示例代码:

Drawable background = mainMenuButton.getBackground();
background.mutate();
background.setColorFilter(new PorterDuffColorFilter(getResources().getColor(R.color.light_green), PorterDuff.Mode.MULTIPLY));
mainMenuButton.setBackground(background);

Android 5.0 Lollipop: setColorFilter "leaks" onto other buttons

关于android - 使用 Android 5 以编程方式更改一种 EditText 颜色会更改整个应用程序中的 EditText 颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30975361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com