【问题标题】:Programatically changing one EditText color changes EditTexts color in whole app using Android 5使用 Android 5 以编程方式更改一种 EditText 颜色会更改整个应用程序中的 EditText 颜色
【发布时间】:2015-06-22 08:36:22
【问题描述】:

我在 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 中则不然。如果我更改一种编辑文本颜色,所有应用程序中的所有编辑文本都会更改它的颜色。有什么办法可以解决这个奇怪的事情吗?或者是一些我不知道的材料设计和 Android 5 技巧?

【问题讨论】:

    标签: android android-edittext


    【解决方案1】:

    问题是背景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

    【讨论】:

      【解决方案2】:

      对类似的微调器颜色更改执行相同操作..

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

      【讨论】:

      • 那么如何在 Lollipop 中更改颜色而不是更改所有编辑文本颜色?这就是问题..
      • @Eddwhis :- 如果你想改变编辑文本的颜色,那么你已经实现了 eText.setBackgroundColor not get 方法使用。
      猜你喜欢
      • 2015-04-02
      • 2016-06-05
      • 1970-01-01
      • 2014-11-17
      • 2016-11-29
      • 2014-10-07
      • 2012-12-25
      • 2014-11-08
      • 1970-01-01
      相关资源
      最近更新 更多