Как убрать клавиатуру при нажатии кнопки?
Как убрать клавиатуру при нажатии кнопки?
Ответы:
Вы хотите отключить или закрыть виртуальную клавиатуру?
Если вы хотите просто отклонить его, вы можете использовать следующие строки кода в кнопке при нажатии кнопки «Событие».
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
getActivity()) getCurrentFocus().getWindowToken()для первого аргумента hideSoftInputFromWindow(). Кроме того, делайте это в, onPause()а не в том onStop()случае, если вы пытаетесь заставить его исчезнуть при смене действий.
Решение, приведенное выше, работает не для всех устройств, кроме того, оно использует 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);
}
}
isAcceptingText()сделал этот ответ лучше других
Это мое решение
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);
}
}
Вот решение Kotlin (смешивая различные ответы в теме)
Создать функцию расширения (возможно, в общем классе 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()
Первое решение с InputMethodManager работало для меня как победитель, метод getWindow (). SetSoftInputMode не работал на Android 4.0.3 HTC Amaze.
@ За исключением Аллена, мне не нужно было окончательно редактировать текст. Может быть, вы используете внутренний класс EditText, который вы объявили содержащий метод? Вы можете сделать EditText переменной класса Activity. Или просто объявите новый EditText внутри внутреннего класса / метода и снова используйте findViewById (). Кроме того, я не нашел, что мне нужно было знать, какой EditText в форме был в фокусе. Я мог бы просто выбрать один произвольно и использовать его. Вот так:
EditText myEditText= (EditText) findViewById(R.id.anyEditTextInForm);
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
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();
}
}
Это решение убедитесь, что оно скрывает клавиатуру и ничего не делать, если она не открыта. Он использует расширение, поэтому его можно использовать из любого класса владельца контекста.
fun Context.dismissKeyboard() {
val imm by lazy { this.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager }
val windowHeightMethod = InputMethodManager::class.java.getMethod("getInputMethodWindowVisibleHeight")
val height = windowHeightMethod.invoke(imm) as Int
if (height > 0) {
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0)
}
}
Используя контекст представления, мы можем достичь желаемого результата с помощью следующих методов расширения в Kotlin:
/**
* Get the [InputMethodManager] using some [Context].
*/
fun Context.getInputMethodManager(): InputMethodManager {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return getSystemService(InputMethodManager::class.java)
}
return getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
}
/**
* Dismiss soft input (keyboard) from the window using a [View] context.
*/
fun View.dismissKeyboard() = context
.getInputMethodManager()
.hideSoftInputFromWindow(
windowToken
, 0
)
Как только они на месте, просто позвоните:
editTextFoo.dismiss()