Intereting Posts
Как выполнять задачи в окне «Обзор» выглядит так же, как Chrome? Java.lang.illegalstateexception: на этом макете уже установлен завод Как распознать конкретную сборку apk, даже если пользовательское обновление apk в Google Play Фрагменты не работают правильно после изменения ориентации Android NDK / JNI: создание общей библиотеки, которая зависит от других разделяемых библиотек ClassNotFoundException по сериализуемому классу во время запуска активности Как я могу скомпилировать Dalvik для локального запуска Linux? Как сохранить состояние фрагмента без стопки в закладке? Ошибка обновления TextView из метода запуска TimerTask Переменное имя пакета с Maven Android Plugin Android BlurMaskFilter не влияет на canvas.drawOval, в то время как текст размыт Как настроить оттенок для просмотра изображений программно в Android? Маркер Google Maps для Google: выпущена неизвестная ссылка Какой размер хранить изображение на сервере для использования с Android-приложением Android: не найден ресурс powered_by_google_light значок в средствах сборки 23.0.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 на клавиатуре"

Если ваше возвращение true из вашего метода onEditorAction , действие не будет обрабатываться снова. В этом случае вы можете вернуть true чтобы не скрывать клавиатуру, когда действие является EditorInfo.IME_ACTION_DONE .