2012-05-11 67 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

相關問題