2017-01-27 4 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

Вы можете создать наблюдателя текста и добавить его в 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

Я думал о строках выполнения условий в коде подкласса и добавлял атрибут, называемый , например, «secondarybackground», как в учебнике [Создание класса вида] (https://developer.android.com/training/custom-views/create-view.html). – Haem