Android解雇键盘

时间:2010-08-24 05:25:19

标签: android

按下按钮时如何关闭键盘?

9 个答案:

答案 0 :(得分:311)

您想要禁用或关闭虚拟键盘吗?

如果你想解雇它,你可以点击事件

在你的按钮中使用以下代码行
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);

答案 1 :(得分:63)

上述解决方案并不适用于所有设备,而且还使用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);
    }
}

答案 2 :(得分:28)

这是我的解决方案

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);
    }
}

答案 3 :(得分:14)

您也可以在按钮点击事件

上使用此代码
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

答案 4 :(得分:7)

这是一个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()

答案 5 :(得分:5)

使用InputMethodManager的第一个解决方案对我来说就像一个冠军,getWindow()。setSoftInputMode方法不适用于android 4.0.3 HTC Amaze。

@Ethan Allen,我不需要让编辑文本最终成功。也许您正在使用您声明包含方法的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);

答案 6 :(得分:4)

{{1}}

答案 7 :(得分:1)

此解决方案确保它隐藏键盘,如果未打开也不会执行任何操作。 它使用扩展名,因此可以从任何上下文所有者类中使用它。


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)
    }
}


答案 8 :(得分: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()