Пользовательский текст редактирования Android с левым значком, который меняет цвет на фокусе и сохраняет цвет значка в фокусе, когда текст редактирования не пуст? - PullRequest
0 голосов
/ 18 декабря 2018

ЧТО Я ИЩУ?

Я хочу, чтобы значок отображался в фокусе, когда editTextView не пустой

Iу меня есть пользовательский editTextView , у которого есть левый значок Drawable, и мне удалось изменить значок, который можно рисовать, когда editTextView onFocus , проблема заключается в том, что я пытаюсь оставить OnFocus Drawable, когдаПравитьпервое изображение, когда editTextView не включенFocus

the first image is when the editTextVw is not onFocus

второе изображение, когда editTextVw находится в фокусе

the second image is when the editTextVw is onFocus

и вот код, который я использовал для изменения рисования при onFocus:

editTextVw2 = (EditText) findViewById(R.id.editTextVw2);
   editTextVw2.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                Drawable focus_icon = context.getResources().getDrawable(R.drawable.user_focus_18dp); //the focus_icon image
                focus_icon = DrawableCompat.wrap(focus_icon);
                editTextVw2.setCompoundDrawablesWithIntrinsicBounds(focus_icon, null, null, null);
            } else {
                Drawable default_icon = context.getResources().getDrawable(R.drawable.user_18dp); //the default image
                default_icon = DrawableCompat.wrap(default_icon);
                editTextVw2.setCompoundDrawablesWithIntrinsicBounds(default_icon, null, null, null);
            }
        }
    });

- я пытался добавить метод, чтобы проверить, еслиeditTextVw не пустой и примените это снова

  Drawable focus_icon = context.getResources().getDrawable(R.drawable.user_focus_18dp); //the focus_icon image
            focus_icon = DrawableCompat.wrap(focus_icon);
            editTextVw2.setCompoundDrawablesWithIntrinsicBounds(focus_icon, null, null, null);

, но этоговорит то же самое.

Каким должно быть быстрое решение для этого?

Ответы [ 4 ]

0 голосов
/ 18 декабря 2018

спасибо за вашу помощь, я, наконец, получаю что-то, что мне нужно, используя это

editTextVw2.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                // if the edit text is on focus change the icon 
                Drawable focus_icon = context.getResources().getDrawable(R.drawable.user_focus_18dp); //the focus_icon image
                focus_icon = DrawableCompat.wrap(focus_icon);
                editTextVw2.setCompoundDrawablesWithIntrinsicBounds(focus_icon, null, null, null);

                // if the edit text is not on focus
            } else {
                // and the edit text is not empty, change the ion
                if (editTextVw2.getText().toString().trim().length() > 0) {
                    Drawable focus_icon = context.getResources().getDrawable(R.drawable.user_focus_18dp); //the focus_icon image
                    focus_icon = DrawableCompat.wrap(focus_icon);
                    editTextVw2.setCompoundDrawablesWithIntrinsicBounds(focus_icon, null, null, null);
                    // otherwise if it's empty, return the the icon the the default one
                } else if (editTextVw2.getText().toString().trim().isEmpty()) {
                    Drawable default_icon = context.getResources().getDrawable(R.drawable.user_18dp); //the default image
                    default_icon = DrawableCompat.wrap(default_icon);
                    editTextVw2.setCompoundDrawablesWithIntrinsicBounds(default_icon, null, null, null);
                }
            }
        }
    });

Если есть лучший способ сделать это, пожалуйста, не стесняйтесьговорит мне

0 голосов
/ 18 декабря 2018

Так сложно понять, чего ты хочешь.:)

Позвольте мне предположить, что вам нужно изменить цвет левого значка EditView, когда это представление либо в фокусе, либо не пусто.

Так что никаких быстрых действий, предоставляемыхКоманда Google / Android.Полное решение для вас, которое я пишу ниже:

  • (1) Сначала проверьте свой статус EditView при создании нового.
  • (2) Добавьте прослушиватель для проверки представленияфокус или нет.
  • (3) Если вы разрешите это EditView содержимое изменилось программно.Подготовьтесь к прослушивателю onTextChanged.

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

editTextVw2.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        boolean shouldDefault = !hasFocus;
        if (shouldDefault) {
            shouldDefault = TextUltis.isEmpty(
                    editTextVw2.getText().toString());
        }

        Drawable icon = context.getResources().getDrawable(
                shouldDefault ? R.drawable.user_18dp : R.drawable.user_focus_18dp);
        editTextVw2.setCompoundDrawablesWithIntrinsicBounds(
                default_icon, null, null, null);
    }
});
0 голосов
/ 18 декабря 2018

Если я правильно понимаю, вы должны изменить свой код, если условие и другое условие, как это:

editTextVw2 = (EditText) findViewById(R.id.editTextVw2);
   editTextVw2.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                   Drawable default_icon = context.getResources().getDrawable(R.drawable.user_18dp); //the default image
                default_icon = DrawableCompat.wrap(default_icon);
                editTextVw2.setCompoundDrawablesWithIntrinsicBounds(default_icon, null, null, null);
            } else {

             Drawable focus_icon = context.getResources().getDrawable(R.drawable.user_focus_18dp); //the focus_icon image
                focus_icon = DrawableCompat.wrap(focus_icon);
                editTextVw2.setCompoundDrawablesWithIntrinsicBounds(focus_icon, null, null, null);
            }
        }
    });

Я надеюсь, что помощь, в противном случае, пожалуйста, опишите больше

0 голосов
/ 18 декабря 2018

вам нужно добавить TextChangedListener к вашему тексту редактирования тоже

editTextVw2.addTextChangedListener(object : TextWatcher {
        override fun afterTextChanged(s: Editable?) {
            if (s.text.toString().isNotEmpty){
                //change color icon
            }

        }

        override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
        }

        override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
        }
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...