2017-01-27 34 views

回答

2

你也可以繼承的EditText確實

public class MyEditText extends EditText { 

    Drawable backgroundEmpty, backgroundFilled; 

    public MyEditText(Context context) { 
     super(context); 
     init(null); 
    } 

    public MyEditText(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(attrs); 
    } 

    private void init(AttributeSet attrs){ 
     if(attrs != null){ 
      backgroundEmpty = ... 
      backgroundFilled = ... 
     }else{ 
      backgroundEmpty = ... 
      backgroundFilled = ... 
     } 
    } 

    @Override 
    protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) { 
     super.onTextChanged(text, start, lengthBefore, lengthAfter); 
     setBackground(text.toString().length() == 0 ? backgroundEmpty : backgroundFilled); 
    } 
} 

或使用TextWatcher

editText.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

    } 

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

    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     editText.setBackground(s.toString().length() == 0 ? backgroundEmpty : backgroundFilled); 
    } 
}); 
+0

你可以推動你的答案更進一步,並提供一些XML代碼^^。 – AnixPasBesoin

+0

xml代碼爲什麼? – lelloman

+0

用於使用自定義EditText。 – AnixPasBesoin

1

您可以創建一個Text Watcher並將其添加到EditText。 更改父母佈局(backgroundColor屬性)內並不難。

Text Watcher Docs

祝你好運。 (下一次嘗試是你的問題:)更多解釋)

+0

我想補充:如果您打算爲了獲得其中的幾個,可能需要子類化EditText並給這個子類一個輔助背景屬性,所以這可以通過佈局xml來處理。 – Haem

+0

這隻有在您開始使用2-Way Databind Android時才能實現。 這是XML佈局接受條件的唯一方式。 請參閱:https://developer.android.com/topic/libraries/data-binding/index.html#expression_language –

+0

我正在考慮實現子類代碼中的條件,並添加一個名爲,比如在「創建視圖類」(https://developer.android.com/training/custom-views/create-view.html)教程中說的「secondarybackground」。 – Haem