EditText странное поведение фокуса - PullRequest
1 голос
/ 15 апреля 2019

Хорошо,

Когда у меня есть фокус на моем EditText, и клавиатура и т.д. показывает.Я нажимаю на свой чертеж в конце текста редактирования (кнопка «Отмена»).Я распознаю это событие с помощью onTouchListener и скрываю клавиатуру, четкую фокусировку и т. Д.

Однако, когда я «касаюсь» кнопки отмены, она скрывает клавиатуру, но фокус остается на тексте редактирования.То есть курсор все еще показывает, но не мигает.Поэтому, когда я снова щелкаю по тексту редактирования, чтобы получить фокус, он показывает возможность копирования / вставки и т. Д., Как будто я долго нажимаю на курсор и не показывает клавиатуру.

Но когда я «нажимаю» кнопку отмены, она очищает фокус, скрывает клавиатуру и, что наиболее важно, скрывает курсор, в результате чего полностью удаляется фокус.Затем, когда я снова нажимаю на текст редактирования, он снова фокусируется и показывает клавиатуру.

Что это за странное поведение, и как мне сделать так, чтобы оно всегда выполняло поведение "нажатия".

мой код:

searchView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_UP) {
                if (event.getRawX() >= searchView.getRight() - searchView.getCompoundDrawables()[2].getBounds().width()) {
                    hideKeyboard(v);
                    isSearching = false;
                    searchView.setText("");
                    searchView.clearFocus();
                    searchView.setFocusable(false);
                    searchView.setFocusableInTouchMode(false);
                    getView().requestFocus(); // parent has both focusables true
                    searchView.setFocusable(true);
                    searchView.setFocusableInTouchMode(true);
                    fetchArticles();

                    return true;
                }
            }
            return false;
        }
    });

Как вы видите, я стараюсь изо всех сил, чтобы всегда вести себя одинаково.Однако пока не повезло.Надеюсь, вы, ребята, можете мне помочь!

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Попробуйте это в родительском элементе этого EditText или в представлениях, к которым вы хотите прикоснуться:

android:clickable="true"
android:focusable="true" 
android:focusableInTouchMode="true"

Это позволит полностью перенести фокус в другом месте с EditText

Тем не менее, в случае, когда ваш ничья находится внутри вашего Edittext, как здесь:

android:drawableLeft="@drawable/my_icon"

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

0 голосов
/ 15 апреля 2019

Итак, мое текущее «решение» - это предложенное @Dmitriy Pavlukhin решение.

Вместо использования drawableEnd из самого EditText, я создал отдельный вид, который имеет такую ​​же прорисовку, и обязательно нарисуйте его.на той же позиции.Теперь, когда я щелкаю этот вид, он очищает вид по желанию 100% времениКодовая база остается той же, что и в вопросе, однако теперь она реализована в виде OnClick для отдельного представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...