如何避免在单击按钮时调用dispatchTouchEvent

时间:2015-01-14 16:41:36

标签: android android-softkeyboard android-button ontouchevent

在我的活动中,我有EditTextButton。当我点击屏幕的其他区域而不是dispatchTouchEvent时,我覆盖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;
}

问题是,每次点击Button时,都会调用dispatchTouchEvent,因此软键盘会消失,这不是我想要的。当我点击Button时,我不想隐藏键盘。我在想的是,当我点击dispatchTouchEvent时,是否可以避免调用Button

任何反馈都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

您无需覆盖dispatchTouch事件。只需将您活动的onClickListener设置为与Button和EditText相同,然后调用方法在开关案例的“默认”情况下隐藏软键盘。

switch (v.getId())
    {
        case R.id.button:
            whateverButtonDoes();
            break;
        case R.id.editText:
            whateverEditTextDoes();
            break;
        default:
            hideKeyboard();
            break;
    }

我强烈建议你定义一种方法来隐藏键盘以获得清晰的编码标准。你也可以在其他地方使用它。