2010-08-24 7 views

ответ

283

Вы хотите отключить или отклонить виртуальную клавиатуру?

Если вы хотите просто уволить его, вы можете использовать следующие строки кода в вашей кнопки на мыши Event

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0); 
+1

+1. Работает как шарм. –

+1

Две проблемы с этим .... один заключается в том, что myEditText должен быть Final. Во-вторых, я должен знать, какое поле EditText имеет фокус. Любое решение? –

+66

Для любого другого, кто спотыкается здесь, вы можете использовать активность (или активность, в которой вы находитесь, или фрагменты 'getActivity()') 'getCurrentFocus(). GetWindowToken()' для первого arg для 'hideSoftInputFromWindow()'. Кроме того, сделайте это в 'onPause()', а не 'onStop()', если вы пытаетесь заставить его уйти при изменении действий. –

13

вы также можете использовать этот код на кнопки мыши событие

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); 
+0

Этот метод был единственным, кто работал на меня, спасибо! – Emilio

+11

Хм. Это не работает для меня. – tomwhipple

+0

Не работает для меня ни на API 23 –

5

первое решение с InputMethodManager работало как класс для меня, getWindow(). Метод setSoftInputMode не был установлен на android 4.0.3 HTC Amaze.

@ Ethan Allen, мне не нужно было редактировать текст редактирования. Может быть, вы используете внутренний класс EditText, который вы объявили содержащим методом? Вы можете сделать EditText переменной класса Activity. Или просто объявите новый EditText внутри внутреннего класса/метода и снова используйте findViewById(). Кроме того, я не обнаружил, что мне нужно знать, какой EditText в форме имеет фокус. Я мог бы выбрать один произвольно и использовать его. Вроде так:

+3

Добро пожаловать в Stack Overflow! Это действительно комментарий, а не ответ. С немного больше rep, [вы сможете оставлять комментарии] (http://stackoverflow.com/privileges/comment). – Jack

+2

Это правильный ответ. Спасибо Энди! –

50

Решение, приведенное выше, не работает на всех устройствах, и, кроме того, оно использует параметр EditText в качестве параметра. Это мое решение, просто назвать этот простой метод:

private void hideSoftKeyBoard() { 
    InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); 

    if(imm.isAcceptingText()) { // verify if the soft keyboard is open      
     imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
    } 
} 
+1

фантастическая точка, спасибо – Fattie

+2

'isAcceptingText()' сделал этот ответ лучше других – user1506104

22

Это мое решение

public static void hideKeyboard(Activity activity) { 
    View v = activity.getWindow().getCurrentFocus(); 
    if (v != null) { 
     InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(v.getWindowToken(), 0); 
    } 
} 
4
public static void hideSoftInput(Activity activity) { 
    try { 
     if (activity == null || activity.isFinishing()) return; 
     Window window = activity.getWindow(); 
     if (window == null) return; 
     View view = window.getCurrentFocus(); 
     //give decorView a chance 
     if (view == null) view = window.getDecorView(); 
     if (view == null) return; 

     InputMethodManager imm = (InputMethodManager) activity.getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
     if (imm == null || !imm.isActive()) return; 
     imm.hideSoftInputFromWindow(view.getWindowToken(), 0); 
    } catch (Throwable e) { 
     e.printStackTrace(); 
    } 
} 
3

Вот решение Котлин (смешивание различных ответов в теме)

Создать (возможно, в общем классе ViewHelpers)

fun Activity.dismissKeyboard() { 
    val inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager 
    if(inputMethodManager.isAcceptingText) 
     inputMethodManager.hideSoftInputFromWindow(this.currentFocus.windowToken, /*flags:*/ 0) 
} 

Тогда просто потреблять с помощью:

// from activity 
this.dismissKeyboard() 

// from fragment 
activity.dismissKeyboard() 
Смежные вопросы