Закрытие виртуальной клавиатуры при нажатии кнопки
У меня есть Activity
с EditText
, кнопкой и ListView
. Цель состоит в том, чтобы набрать экран поиска в EditText
, нажать кнопку и отобразить результаты поиска.
Все работает отлично, но виртуальная клавиатура ведет себя странно.
Если я нажму кнопку EditText
, я получу виртуальную клавиатуру. Если я нажму кнопку "Готово" на виртуальной клавиатуре, она исчезнет. Однако, если я нажму кнопку поиска, прежде чем нажимать "Готово" на виртуальной клавиатуре, виртуальная клавиатура останется, и я не могу избавиться от нее. Нажатие кнопки "Готово" не закрывает клавиатуру. Он меняет кнопку "Готово" от "Готово" до стрелки и остается видимой.
Спасибо за помощь
Ответы
Ответ 1
mMyTextView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
// hide virtual keyboard
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(m_txtSearchText.getWindowToken(),
InputMethodManager.RESULT_UNCHANGED_SHOWN);
return true;
}
return false;
}
});
Ответ 2
InputMethodManager inputManager = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
Я положил это прямо после события onClick(View v)
.
Вам нужно импортировать android.view.inputmethod.InputMethodManager
;
Клавиатура скрывается, когда вы нажимаете кнопку.
Ответ 3
Использовать код ниже
your_button_id.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
} catch (Exception e) {
}
}
});
Ответ 4
Вы должны реализовать OnEditorActionListener
для своего EditView
public void performClickOnDone(EditView editView, final View button){
textView.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(EditView v, int actionId, KeyEvent event) {
hideKeyboard();
button.requestFocus();
button.performClick();
return true;
}
});
И вы скрываете клавиатуру:
public void hideKeybord(View view) {
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(),
InputMethodManager.RESULT_UNCHANGED_SHOWN);
}
Вы также должны скрывать клавиатуру в своей кнопке, используя onClickListener
Теперь нажатие кнопки "Готово" на виртуальной клавиатуре и кнопке будет делать то же самое - скрыть клавиатуру и выполнить действие щелчка.
Ответ 5
Добавьте следующий код внутри события нажатия кнопки:
InputMethodManager inputManager = (InputMethodManager) getSystemService(this.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
Ответ 6
Поскольку у вас есть только один текст редактирования, просто вызовите действие, выполненное для этого текста редактирования внутри вашего нажатия кнопки, а остальная часть будет обработана системой. Если бы у вас было более одного редактора, это было бы не так эффективно, потому что сначала вам нужно было сфокусировать edittext. Но в вашем случае это будет отлично работать
myedittext.onEditorAction(EditorInfo.IME_ACTION_DONE)
Ответ 7
Для операции
InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
Для фрагментов используйте getActivity()
getActivity() getSystemService();.
getActivity() getCurrentFocus();.
InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0);
Ответ 8
Попробуйте это...
-
Для отображения клавиатуры
editText.requestFocus();
InputMethodManager imm = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
-
Для скрытия клавиатуры
InputMethodManager inputManager = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
Ответ 9
Это решение отлично подходит для меня:
private void showKeyboard(EditText editText) {
editText.requestFocus();
editText.setFocusableInTouchMode(true);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.RESULT_UNCHANGED_SHOWN);
editText.setSelection(editText.getText().length());
}
private void closeKeyboard() {
InputMethodManager inputManager = (InputMethodManager) getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN);
}
Ответ 10
Этот код используется в событии click button
// Check if no view has focus:
View view = this.getCurrentFocus();
if (view != null) {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
Ответ 11
View view = this.getCurrentFocus();
if (view != null) {
InputMethodManager imm =(InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);enter code here}
Ответ 12
Исключение ошибки Null Point Crash:
У меня был случай, когда клавиатура не открывается, когда пользователь нажимает кнопку. Вы должны написать оператор if, чтобы проверить, что getCurrentFocus() не является нулем:
InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if(getCurrentFocus() != null) {
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
Ответ 13
Если вы установили android:singleLine="true"
, автоматически кнопка скрывает клавиатуру.