我使用了一些 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()。但是,当我按“完成”时,键盘不再消失。如何将这种默认行为恢复到例程中?
为什么不:
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() 中发生,并且默认操作不需要执行操作。
您可以通过以下方式关闭键盘:
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getWindowToken(), 0);
您必须将 onClickListener 附加到执行以下代码的按钮:
InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editview.getWindowToken(), 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);