16

我使用了一些 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;
        }
    });

激活该字段会调用键盘,然后按“完成”会成功评估 mySubroutine()。但是,当我按下“完成”时,键盘不再消失。如何将此默认行为恢复为例程?

4

4 回答 4

55

为什么不:

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

            mySubroutine(); 
        } 
        return false; 
    } 
}); 

处理完代码后只需返回 false 。这可以解释为无论您的代码 (mySubroutine()) 做什么,之后它仍将使用默认操作。如果您返回“true”,则说明您是一个快乐的编码员,需要完成的所有事情都已在您的 mySubroutine() 中发生,并且默认操作不需要执行操作。

于 2010-08-10T13:48:43.340 回答
13

您可以通过以下方式关闭键盘:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getWindowToken(), 0);
于 2010-04-18T12:51:34.277 回答
8

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

InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editview.getWindowToken(), 0);
于 2010-09-01T12:03:05.383 回答
0

我有同样的问题。在 editText VISIBILITY 从 GONE 更改为 VISIBLE 之后,我必须立即设置焦点并显示软键盘。我使用以下代码实现了这一点:

        (new Handler()).postDelayed(new Runnable() {

        public void run() {              yourEditText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
            yourEditText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));                       

        }
    }, 200);
于 2016-08-11T16:39:37.983 回答