2012-05-11 29 views
0

我想改变我的EditText的背景颜色,当验证失败的瑞迪施彩色,然后,当用户开始改正它,回到原来的颜色。Android如何复制EditText Drawable Background?

的EditText上有圆形边框,因此使用setBackgroundColor()这里行不通,因为它绘制一个矩形难看,而不是漂亮的圆角矩形。

我试图挽救背景和事后恢复。并用一个新的背景将它涂成红色。下面的代码不起作用,因为tv.getBackground()返回相同的,参照上述两个originalBgerrorBg。当我彩色滤光片设置为errorBg我真正改变它originalBg了。

我怎样才能复制背景物体进入errorBg这样我就可以改变颜色吗?

final Drawable originalBg = tv.getBackground(); 
    final Drawable errorBg = tv.getBackground(); <-- this does not create a new Drawable, just the same reference 
    errorBg.setColorFilter(0xFFff6347, Mode.MULTIPLY); 
    tv.setBackgroundDrawable(errorBg); 
    tv.invalidate(); 
    tv.addTextChangedListener(new TextWatcher() { 

     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      tv.setBackgroundDrawable(originalBg); 
      tv.invalidate(); 
     } 

     public void afterTextChanged(Editable s) {} 

     public void onTextChanged(CharSequence s, int start, int before, int count) {} 

    }); 

回答

1

则可以取消setColorFilter(空)彩色滤光片

tv.getBackgroundDrawable().setColorFilter(0xFFff6347, Mode.MULTIPLY); 
tv.invalidate(); 
tv.addTextChangedListener(new TextWatcher() { 

    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
       tv.getBackgroundDrawable().setColorFilter(null); 
       tv.invalidate(); 
    } 
+0

就是这样。它非常完美! (我用tv.getBackground()因为tv.getBackgroundDrawable()不存在);-) – ilomambo

1

您是否尝试过创建一个副本:

final Drawable originalBg = tv.getBackground(); 
final BitmapDrawable errorBg = new BitmapDrawable(getResources(), (BitmapDrawable) tv.getBackground(); 
+0

谢谢你,我没有测试你的建议,AB11的解决方案是完美的。 – ilomambo

0

您可以创建定义带有圆角的绘制作为背景使用的XML文件。

<?xml version="1.0" encoding="utf-8"?> 

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
    <solid android:color="#ff6347"/> 
    <corners android:radius="3dp"/> 
</shape> 

将这个文件在你的可绘制文件夹,并使用您的EditText的setBackgroundDrawable()方法来使用它。你可能需要玩弄颜色和角落半径来获得你想要的颜色和角度。不完全是你的问题的答案,但希望它可以提供帮助。

+0

我不想创建一个新的形状,形状已经存在。 – ilomambo

相关问题