Хорошо,
Когда у меня есть фокус на мой 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;
}
});
Как вы видите, я стараюсь изо всех сил, чтобы всегда вести себя одинаково. Однако пока не повезло. Надеюсь, вы, ребята, можете мне помочь!
Попробуйте это в родителе этого EditText или в представлениях, которые вы хотите коснуться:
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
Это позволит полностью перенести фокус в другом месте с EditText
Однако, в случае, когда ваш drawable находится внутри вашего Edittext, как здесь:
android:drawableLeft="@drawable/my_icon"
решение не будет работать до тех пор, пока вы не сделаете его в виде отдельного представления в макете.
Итак, мое текущее "решение" - это предложенное @Dmitriy Pavlukhin решение.
Вместо того чтобы использовать drawableEnd из самого EditText, я создал отдельный вид, который имеет тот же самый объект рисования, и убедитесь, что он нарисован в той же позиции. Теперь, когда я щелкаю этот вид, он очищает вид по желанию в 100% случаев. Кодовая база остается той же, что и в вопросе, однако теперь она реализована в виде OnClick в отдельном представлении.