为了在触摸或点击Edittext外部时关闭键盘,我按照下面的代码。如果有一个edittext正常工作但多个不能正常工作。
示例场景:
步骤1:单击第一个edittext打开键盘。 第2步:单击第一个edittext外部,关闭键盘。 第3步:单击第二个edittext,它不会打开键盘。
我认为它将第二个edittext视为第一个edittext的外部。我真的不知道......有人可以帮助我......
并且此代码适用于我们可以使用的活动中的所有edittext字段,我们也可以通过使用特定的edittext来完成,但我不想找到特定edittext的外部点击或触摸。
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
View view = getCurrentFocus();
boolean ret = super.dispatchTouchEvent(event);
if (view instanceof EditText) {
View w = getCurrentFocus();
int scrcoords[] = new int[2];
w.getLocationOnScreen(scrcoords);
float x = event.getRawX() + w.getLeft() - scrcoords[0];
float y = event.getRawY() + w.getTop() - scrcoords[1];
if (event.getAction() == MotionEvent.ACTION_UP
&& (x < w.getLeft() || x >= w.getRight()
|| y < w.getTop() || y > w.getBottom()) ) {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getWindow().getCurrentFocus().getWindowToken(), 0);
}
}
return ret;
}
答案 0 :(得分:0)
请尝试使用以下代码:
public static void hideSoftKeyboard(Activity activity) {
InputMethodManager inputMethodManager = (InputMethodManager) activity
.getSystemService(Activity.INPUT_METHOD_SERVICE);
if (inputMethodManager.isAcceptingText()) {
inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED,
0);//You need to change the focus here to another view for hide the keyboard.
}
}
您需要按如下方式调用上述方法: 在这里,我们检查如果edittext对象具有焦点,则调用下面的方法。
if (etSeach.hasFocus()) {
hideSoftKeyboard(ViewTaskActivity.this);
}