Фокус и клавиатура в EditText

При повторном нажатии на EditText с фокусом и уже открытой клавиатурой, клавиатура и фокус на долю секунды пропадают и появляются заново, получается что клавиатура как-то "выпрыгивает", не нравится глазу. Посмотрел другие приложения, например "Поиск" в TikTok, там такого исчезновения и появления нет. Это можно как то настроить?

UPD: Убрал эту часть кода, "обновление" пропало, но этот метод позволял убирать фокус с клавиатурой просто по клику на экран, и был достаточно важным, его можно как то по другому реализовать ?

@Override
public boolean dispatchTouchEvent(@NonNull MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        View v = getCurrentFocus();
        if (v instanceof EditText) {
            v.clearFocus();
            InputMethodManager imm = (InputMethodManager) getBaseContext().getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
        }
    }
    return super.dispatchTouchEvent(event);
}

Ответы (1 шт):

Автор решения: Andrew

Можно добавить слушатель который будет проверять наличие фокуса у поля для ввода:

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus) {
            dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
        }
    }
});

таким образом, если фокуса нет то показывать клавиатуру. Так же для проверки видимости клавиатуры можно воспользоваться этим и этим способами.

UPDATE

Убирать фокус при клике можно кликнув на родительский макет поля для ввода, вот например так:

FrameLayout touchInterceptor = (FrameLayout)findViewById(R.id.touchInterceptor);
touchInterceptor.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            if (mEditText.isFocused()) {
                Rect outRect = new Rect();
                mEditText.getGlobalVisibleRect(outRect);
                if (!outRect.contains((int)event.getRawX(), (int)event.getRawY())) {
                    mEditText.clearFocus();
                    InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
                }
            }
        }
        return false;
    }
});

так же в xml можно добавить такие поля:

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

Вот вопрос по данной тематике.

→ Ссылка