Android:将键盘隐藏在EditText的重写"完成"按键中

mar*_*ard 12 android overriding android-edittext

我使用了一些Android代码来覆盖EditText字段中的"完成"按钮:

   myEditField.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_DONE) {

                mySubroutine();

                return true;
            }
            return false;
        }
    });
Run Code Online (Sandbox Code Playgroud)

激活该字段会调出键盘,按"完成"会成功评估mySubroutine().但是,当我按"完成"时,键盘不再消失.如何将此默认行为恢复到例程?

jus*_*der 48

为什么不:

myEditField.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
        if (actionId == EditorInfo.IME_ACTION_DONE) { 

            mySubroutine(); 
        } 
        return false; 
    } 
}); 
Run Code Online (Sandbox Code Playgroud)

处理代码后返回false.这可以解释为无论您的代码(mySubroutine())是什么,它仍将使用默认操作.如果你返回"true",你就知道你是一个快乐的程序员,所有需要完成的事情都发生在mySubroutine()中,默认动作不需要采取行动.


Mac*_*rse 13

您可以执行以下操作来关闭键盘:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getWindowToken(), 0);
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,我需要一个依赖.我还必须用v.getWindowToken()替换getWindowToken(),否则它工作得很好,谢谢!现在我只需要了解它做了什么 (5认同)

小智 8

您必须将onClickListener附加到执行以下代码的按钮:

InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editview.getWindowToken(), 0);
Run Code Online (Sandbox Code Playgroud)