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

时间:2015-06-22 08:36:22

标签: android android-edittext

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

public Task<int> SaveChangesAsync()
{
    return dbContext.SaveChangesAsync();
}

在低于5的Android版本中,一切都很完美,但不是在Lollipop中。如果我更改了一个edittext颜色,则所有应用中的所有edittexts都会更改颜色。有没有办法解决这个奇怪的事情?或者它是一些材料设计和Android 5技巧,我不知道?

2 个答案:

答案 0 :(得分:3)

问题是后台Drawable在许多视图中被重用。为确保多个视图之间不共享Drawable,您应使用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

答案 1 :(得分:0)

对于类似微调器的颜色变化,请执行相同操作。

在Android Lollipop版本中,您必须单独为kitkat版本和棒棒糖版本实现代码,请执行此代码以更改微调器的背景。它的图像背景变化的例子。

      if (Build.VERSION.SDK_INT => Build.VERSION_CODES.KitKat) 
                        {
                            //for Lollipop Vession
                      // do on textChangeListner code
eText.setBackgroundDrawable(Color.RED);
                        }
                        else
                        {
     // do on textChangeListner code
eText.setBackgroundResource(Color.RED);
                        }

我希望它可以帮助你,如果它是有用的代码那么请标记我.. Thanx ..:)