2015-06-22 16 views
2

我在Android 5中有非常奇怪的問題。如果用戶輸入錯誤,我想設置錯誤來編輯文本並將其更改爲紅色,並且當用戶開始鍵入我想將顏色變回綠色。這是我該如何做的:編程式更改一個EditText顏色變化使用Android 5在整個應用程序中編輯文本顏色

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) {} 
    }); 

在Android版本低於5的情況下,一切都很完美,但不是棒棒糖。如果我更改一種edittext顏色,所有應用程序中的所有edittext都會將其更改爲彩色。有什麼方法可以解決這個奇怪的問題嗎?或者它是一些我不知道的材料設計和Android 5技巧?

回答

0

做同樣爲喜歡微調顏色的變化..

在運行Android Lollipop版本你必須單獨實施奇巧版本和棒棒糖版本代碼,請做微調的變化背景這段代碼。它的圖像背景變化的例子。

 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); 
         } 

我希望它可以幫助你,如果是,那麼請標誌着我..感謝名單有用的代碼.. :)

+0

那麼如何改變顏色的棒棒糖,而不是改變所有編輯文本的顏色?這是問題.. – Eddwhis

+0

@Eddwhis: - 如果你想改變編輯文本的顏色,那麼你已經實現了eText.setBackgroundColor沒有得到方法的使用。 –

3

的問題是,背景繪製對象是在許多次重複使用。爲確保Drawable不會在多個視圖之間共享,您應該使用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

相關問題