Как автоматически убирать фокус с EditText при клике вне него в… — SKETCHWARE95 — TG.ME

Как автоматически убирать фокус с EditText при клике вне него в Android В Android часто возникает ситуация, когда пользователь хочет убрать фокус с EditText, кликнув по любой части экрана. Особенно это актуально, если клавиатура закрывается только вручную. Ниже описан простой и универсальный способ, который работает для EditText как в Activity, так и во фрагментах. 1. Проблема Когда EditText в фокусе, клавиатура остаётся открытой, и пользователю нужно явно нажать “Назад” или кликнуть на другой EditText. Если экран содержит множество кнопок, текстов и других элементов, вручную добавлять OnTouchListener на каждый элемент неудобно. 2. Решение через dispatchTouchEvent Android позволяет перехватывать все касания на экране через метод dispatchTouchEvent в Activity. Преимущества: Работает для всех EditText на экране. Не зависит от того, находится ли EditText в фрагменте или Activity. Не нужно назначать слушатели на каждую кнопку или view. 3. Код для Activity @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { // Получаем текущий фокус View v = getCurrentFocus(); if (v instanceof EditText) { Rect outRect = new Rect(); // Получаем глобальные координаты EditText v.getGlobalVisibleRect(outRect); // Проверяем, кликнули ли вне EditText if (!outRect.contains((int) ev.getRawX(), (int) ev.getRawY())) { // Снимаем фокус v.clearFocus(); // Прячем клавиатуру InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if (imm != null) { imm.hideSoftInputFromWindow(v.getWindowToken(), 0); } } } } return super.dispatchTouchEvent(ev); } Комментарии к коду: getCurrentFocus() возвращает любой View с фокусом, даже если он в фрагменте. Rect outRect определяет область EditText на экране. contains() проверяет, кликнули ли вне EditText. clearFocus() снимает фокус. InputMethodManager.hideSoftInputFromWindow() скрывает клавиатуру. 4. Куда вставлять код В Activity, где находятся ваши фрагменты, нужно просто переопределить метод dispatchTouchEvent. Для EditText в фрагментах дополнительных действий не требуется: Activity “видит” их через getCurrentFocus(). Этот метод будет работать для всех EditText на всех фрагментах, без отдельной настройки каждого элемента. 5. Итог Использование dispatchTouchEvent — это простой и универсальный способ управлять фокусом EditText: Работает с любым количеством EditText. Не зависит от расположения элементов в иерархии. Прячет клавиатуру автоматически. Этот метод значительно упрощает пользовательский опыт, особенно на экранах с множеством интерактивных элементов. для skpro импортируйте import android.view.inputmethod.InputMethodManager; Java код вставьте в moreblock между скобками } Java code {

November 19, 2025 848 3