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

问题描述 投票:2回答:2

我在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中。如果我更改了一个edittext颜色,则所有应用中的所有edittexts都会更改颜色。有没有办法解决这个奇怪的事情?或者它是一些材料设计和Android 5技巧,我不知道?

android android-edittext
2个回答
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


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 .. :)

© www.soinside.com 2019 - 2024. All rights reserved.