2012-06-18 50 views
1

現在我正在構建一個簡單的表單,並且正在設計它,以便如果用戶在單擊提交按鈕之前沒有輸入必要的信息,背景將變爲紅色。如果他們已經輸入了正確的信息,表格會回到以前的樣子。setBackgroundColor方法,android

// "if empty then set fields to red" checks 
      if (firstLastName.getText().toString().equals("")) { 
       firstLastName.setBackgroundColor(Color.RED); 
      } 
      else 
       firstLastName.setBackgroundColor(Color.WHITE); 
     } 

問題是,白色顯然不是它以前,因爲它看起來不同。有沒有辦法重置表單而不刪除用戶輸入的信息?

如果我不清楚,請讓我知道,我會盡量詳細說明。

+2

只是作爲一個選擇:你可以設置使用'firstLastName.setError您的EditText上的錯誤信息(「本場需要被填寫,喲!「);' – dymmeh

+1

這是一個EditText?先嚐試在它上面調用getBackground()並暫時存儲這個結果,以便可以重置它。更可能的是,默認背景不是Color.WHITE。 – javajavajava

+0

我建議獲取默認的背景顏色,但我不知道這是否可能。但是你可以定義你自己的主題。 – Sam

回答

1

如何設置和取消的彩色濾光片,而不是改變背景顏色:

if (firstLastName.getText().toString().equals("")) { 
    // 0xFFFF0000 is red 
    firstLastName.getBackground().setColorFilter(0xFFFF0000, PorterDuff.Mode.DARKEN);} 
else { 
    //Setting to null removes filter 
    firstLastName.getBackground().setColorFilter(null); 
} 
+1

+1,以及關於爲什麼OP的實現被破壞的更多信息:任何SDK widget的默認背景通常是''或9-補丁圖像。設置顏色將清除這個複雜的可繪製對象,並用一個'ColorDrawable'替代它。一旦修改,就無法回到最初的'StateListDrawable',因爲這些可繪製的ID不會暴露給SDK。 – Devunwired