Intereting Posts
Как интегрировать Zxing без установки приложения сканера штрих-кода? Как запросить значение столбца, заданного как указатель на другую таблицу в Parse Поддержка Android Multi-Window: обнаружение, отображается ли строка состояния? Не удалось подтвердить подпись подписи в латинском алфавите AVD остается застрявшим на "Android запускает" Удаление меток точек из линейной диаграммы с использованием библиотеки MPAndroidChart Как получить N-текст, который может быть помещен в Screen / TextView с определенным размером? Перенаправление аудио / создание альтернативных звуковых дорожек в Android Сохранять статические данные в Android – пользовательский ресурс? Невозможно получить точную форму круга при использовании вида карты Как защитить медиаконтент (видео, аудио) на Android от сохранения / перераспределения? Ошибка MODE_PRIVATE в sharedpreferences Я не могу загрузить какой-либо проект после обновления Android Studio до версии 2.3 Удалить значок уведомления из строки состояния Настройка стилей программно добавленных представлений

Как НЕ закрывать клавиатуру при нажатии DONE на клавиатуре

Когда пользователь нажимает «Готово» на мягкой клавиатуре, клавиатура закрывается. Я хочу, чтобы он закрывался только в том случае, если выполняется определенное условие (например, пароль был введен правильно).

Это мой код (настраивает слушателя при нажатии кнопки «Готово»):

final EditText et = (EditText)findViewById(R.id.et); et.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if(actionId==EditorInfo.IME_ACTION_DONE) { if (et.getText().toString().equals(password)) // they entered correct { // log them in } else { // bring up the keyboard getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); Toast.makeText(Main.this, "Incorrect.", Toast.LENGTH_SHORT).show(); } } return false; } }); 

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

Возможная тема для ответов:

 activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 

И тому подобное, но я точно не знаю.


РЕШЕНИЕ:

 EditText et = (EditText)findViewById(R.id.et); et.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if(actionId==EditorInfo.IME_ACTION_DONE) { if (et.getText().toString().equals(password)) // they entered correct { // log them in return false; // close the keyboard } else { Toast.makeText(Main.this, "Incorrect.", Toast.LENGTH_SHORT).show(); return true; // keep the keyboard up } } // if you don't have the return statements in the if structure above, you // could put return true; here to always keep the keyboard up when the "DONE" // action is pressed. But with the return statements above, it doesn't matter return false; // or return true } }); 

Solutions Collecting From Web of "Как НЕ закрывать клавиатуру при нажатии DONE на клавиатуре"