触摸时关闭键盘或在Android中的EditText外部点击

时间:2015-11-16 10:26:13

标签: android android-edittext touch-event

为了在触摸或点击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;
        }

1 个答案:

答案 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);
                    }