Android:在 EditText 的重写“完成”按键中隐藏键盘

问题描述 投票:0回答:4

我使用了一些 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()。但是,当我按“完成”时,键盘不再消失。如何将这种默认行为恢复到例程中?

android overriding android-edittext
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() 中发生,并且默认操作不需要执行操作。


13
投票

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

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getWindowToken(), 0);

8
投票

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

InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editview.getWindowToken(), 0);

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);
© www.soinside.com 2019 - 2024. All rights reserved.