Изменить цвет EditText при установке значения

У меня есть 8 EditText.

Пользователь вводит некоторое значение в некоторый EditText, и пустой EditText заполняется некоторым вычислением.

Я написал код для изменения цвета EditText, как показано ниже:

                   if (ng1 == 0) {
                                if (Goal >= 0 && Goal <=10)
                                    eg1.setText(Float.toString(Goal));
                                 eg1.setTextColor(Color.BLUE);

                            }

                            if (ng2 == 0) {
                                if (Goal >= 0 && Goal <=10)
                                    eg2.setText(Float.toString(Goal));
                                eg2.setTextColor(Color.BLUE);
                            }

                            if (ng3 == 0 ) {
                                if (Goal >= 0 && Goal <=10)
                                    //eg3.setText("");
                                    eg3.setText(Float.toString(Goal));
                                eg3.setTextColor(Color.BLUE);
                            }

Имеется в виду, что сценарий состоит в том, что пользователь может поместить значение в 2, 3, 4, когда он захочет, а остальная часть текста редактирования будет заполнена на основе некоторых вычислений, и чтобы показать заполненного пользователя, мне нужно изменить его на синий цвет., и если пользователь редактирует текст редактирования, цвет теперь становится синим, но я хочу черный

Какой путь?

4 ответа

Решение

Попробуйте использовать onTouchListner, когда пользователь нажимает, чтобы editText изменил цвет на Черный.

Так как у вас есть много EditText элементы управления, которые обрабатываются таким же образом, я бы предложил использовать TextWatcher ( документация), чтобы прослушать изменения текста и избежать дублирования одних и тех же операций для всех элементов управления 3, 8 или zillion.

Обратите внимание, что приведенные ниже примеры не скомпилированы и написаны в простом текстовом редакторе из памяти, поэтому могут потребоваться изменения для их компиляции. Тем не менее, это всего лишь шаблон, чтобы указать вам в правильном направлении

Сначала вы создаете кастом TextWatcher реализация для того, чтобы иметь то же самое TextWatcher справиться со всеми EditText"s

private class MyTextWatcher implements TextWatcher {

    private EditText mEditText;

    public MyTextWatcher(EditText view) {
        mEditText = view;
    }

    public void afterTextChanged (Editable s) {}

    public void beforeTextChanged (CharSequence s, int start, int count, int after) {}

    public void onTextChanged (CharSequence s, int start, int before, int count) {
        //Check if has user focus. if it has, then user is typing smth. set appropriate color
        mEditText.setTextColor(mEditText.hasFocus() ? Color.BLACK : Color.BLUE);
    }
};

Затем в onCreate() Вы добавляете слушателей textChange:

eg1 = (EditText)findViewById(R.id.your_eg1_id);
eg1.addTextChangedListener(new MyTextWatcher(eg1));
eg2 = (EditText)findViewById(R.id.your_eg2_id);
eg2.addTextChangedListener(new MyTextWatcher(eg2));
...
egN = (EditText)findViewById(R.id.your_egN_id);
egN.addTextChangedListener(new MyTextWatcher(eg3));

Что я сделал, я просто добавил слушателя ontouch ко всему тексту редактирования

eg1.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                eg1.setTextColor(Color.BLACK);
                return false;
            }
        });

        eg2.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                eg2.setTextColor(Color.BLACK);
                return false;
            }
        });

        eg3.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                eg3.setTextColor(Color.BLACK);
                return false;
            }
        });

        eg4.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                eg4.setTextColor(Color.BLACK);
                return false;
            }
        });

        eg5.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                eg5.setTextColor(Color.BLACK);
                return false;
            }
        });

        eg6.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                eg6.setTextColor(Color.BLACK);
                return false;
            }
        });

        eg7.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                eg7.setTextColor(Color.BLACK);
                return false;
            }
        });

        eg8.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                eg8.setTextColor(Color.BLACK);
                return false;
            }
        }); 

Вы должны использовать слушателя изменения текста.

_edtText.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // TODO Auto-generated method stub
                _edtText.setTextColor(Color.BLACK); // you can set color onTextChanged
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub


            }

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub

            }
        });
Другие вопросы по тегам