Android clearFocus()可以工作,但键盘保持打开状态

Android clearFocus()可以工作,但键盘保持打开状态,android,android-edittext,android-softkeyboard,soft-keyboard,Android,Android Edittext,Android Softkeyboard,Soft Keyboard,我有一个单一的编辑文本。我希望当用户完成它时,能够清除它的焦点 按照所有答案进行操作,我已使父对象可聚焦,并在需要时清除编辑文本的焦点。问题是,尽管它不再处于焦点位置,但键盘仍然打开,因为现在父对象处于焦点位置。对于用户来说,键盘仍然打开是没有意义的 **要清楚的是,我正在使用一种方法来关闭键盘。它总是有效,但现在不起作用,可能是因为我上面提到的 有没有办法消除焦点并关闭键盘 这是我用来关闭键盘的方法 fun closeKeyboard(activity: Activity) { va

我有一个单一的编辑文本。我希望当用户完成它时,能够清除它的焦点

按照所有答案进行操作,我已使父对象可聚焦,并在需要时清除编辑文本的焦点。问题是,尽管它不再处于焦点位置,但键盘仍然打开,因为现在父对象处于焦点位置。对于用户来说,键盘仍然打开是没有意义的

**要清楚的是,我正在使用一种方法来关闭键盘。它总是有效,但现在不起作用,可能是因为我上面提到的

有没有办法消除焦点并关闭键盘

这是我用来关闭键盘的方法

fun closeKeyboard(activity: Activity) {

    val view = activity.currentFocus
    if (view != null) {
        val imm = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager?
        imm!!.hideSoftInputFromWindow(view.windowToken, InputMethodManager.HIDE_IMPLICIT_ONLY)
    }
}
清除文本焦点:

EditText editText = findViewById(R.id.someEditText);
editText.clearFocus();
或作为最后手段:

getWindow().getDecorView().clearFocus();
也可以将这些属性添加到布局中:

android:focusable=“true” android:focusableInTouchMode=“true” 来自活动的Java

/*
*关闭键盘
* */
试一试{
InputMethodManager imm=(InputMethodManager)getSystemService(Context.INPUT\u方法\u服务);
视图v=getWindow().getCurrentFocus();
如果(v!=null){
IBinder windowToken=v.getWindowToken();
if(windowToken!=null&&imm!=null){
imm.hideSoftInputFromWindow(windowToken,0);
}
}
}捕获(例外e){
System.out.println(e.getMessage());
}
Kotlin扩展功能

/*
 * Dismiss keyboard
 * */
 fun Context.dismissKeyboard() {
     val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
     val windowToken = (this as? Activity)?.currentFocus?.windowToken
     windowToken?.let { imm.hideSoftInputFromWindow(it, 0) }
 }
清除文本焦点:

EditText editText = findViewById(R.id.someEditText);
editText.clearFocus();
或作为最后手段:

getWindow().getDecorView().clearFocus();
也可以将这些属性添加到布局中:

android:focusable=“true” android:focusableInTouchMode=“true” 来自活动的Java

/*
*关闭键盘
* */
试一试{
InputMethodManager imm=(InputMethodManager)getSystemService(Context.INPUT\u方法\u服务);
视图v=getWindow().getCurrentFocus();
如果(v!=null){
IBinder windowToken=v.getWindowToken();
if(windowToken!=null&&imm!=null){
imm.hideSoftInputFromWindow(windowToken,0);
}
}
}捕获(例外e){
System.out.println(e.getMessage());
}
Kotlin扩展功能

/*
 * Dismiss keyboard
 * */
 fun Context.dismissKeyboard() {
     val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
     val windowToken = (this as? Activity)?.currentFocus?.windowToken
     windowToken?.let { imm.hideSoftInputFromWindow(it, 0) }
 }

它似乎在我的AS仿真器上工作,但在我的实际设备上不工作。老实说,我很惊讶它居然能在我的模拟器上工作,因为我以前一直在用一个稍微不同的功能放弃键盘。我认为问题是现在有了一个不同的视图,但该视图只是一个容器,所以不应该有键盘。它似乎在我的AS模拟器上工作,但在我的实际设备上没有。老实说,我很惊讶它居然能在我的模拟器上工作,因为我以前一直在用一个稍微不同的功能放弃键盘。我认为问题在于现在有一个不同的视图处于焦点,但该视图只是一个容器,因此不应该有键盘。这与下面的答案不同:
InputMethodManager.HIDE\u IMPLICIT\u ONLY
是一个值为1的枚举,尝试传递0或
RESULT\u UNCHANGED\u show
下面是一些工作解决方案的讨论:这与下面的答案不同:
InputMethodManager.HIDE\u IMPLICIT\u ONLY
是一个值为1的枚举,尝试传递0或
RESULT\u UNCHANGED\u show
下面是一些工作解决方案的讨论: