如何在对话框关闭时隐藏键盘

Jac*_*ień 7 android android-keypad android-softkeyboard

我有Activity单身Fragment就可以了.EditText片段上有一个.

一旦片段显示,键盘就会弹出,但我设法在清单android中阻止它设置:windowSoftInputMode ="stateHidden"

但是,还有一个按钮,用于打开另一个EditText的对话框.

我有一个方法可以在对话框关闭时自动关闭键盘.

public static void closeInput(final View caller) {      
    caller.post(new Runnable() {
        @Override
        public void run() {
            InputMethodManager imm = (InputMethodManager) caller.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(caller.getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

这个方法不是很糟糕,而且有些不对劲.Dialog EditTextinputType="numberDecimal".在closeInput()似乎不关闭键盘时,仅将其改为默认的字母排列状态.

这里发生了什么?

Jac*_*ień 15

在我的情况下,我使用的方法:

public static void closeInput(final View caller) {  
    caller.postDelayed(new Runnable() {
        @Override
        public void run() {
            InputMethodManager imm = (InputMethodManager) caller.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(caller.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
        }
    }, 100);
}
Run Code Online (Sandbox Code Playgroud)

由于Manifest中的活动设置,它拒绝正常工作,如果我记得你不能android:windowSoftInputMode="any_of_these"设置

  • 在我的测试中,你不需要`postDelayed(runnable,100)`.'100`似乎很脆弱.您可以使用`post(runnable)`代替(适用于我).任何人都可以证实/反驳这一点吗? (3认同)

小智 8

从片段onCreateView()方法,你可以这样做:

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)
Run Code Online (Sandbox Code Playgroud)

它会在Dismiss of Dialog上自动隐藏软键盘


小智 5

在BaseDialog.java中

protected void hideSoftKeyboard() {
    InputMethodManager imm = (InputMethodManager) this.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
    if (imm.isActive()) {
        imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
    }
}
Run Code Online (Sandbox Code Playgroud)