如何监听系统键盘收起 Android

作为一名经验丰富的开发者,我将教你如何实现监听系统键盘收起的功能。这对于刚入行的小白可能会有些困难,但我会一步步引导你完成这个任务。

流程图

flowchart TD
    Start --> 输入框获取焦点
    输入框获取焦点 --> 用户输入
    用户输入 --> 键盘弹出
    键盘弹出 --> 用户收起键盘
    用户收起键盘 --> 键盘收起事件
    键盘收起事件 --> 处理收起事件
    处理收起事件 --> End

步骤

首先,让我们来看一下整个过程的步骤:

步骤 操作
1 监听输入框获得焦点事件
2 监听输入框失去焦点事件
3 处理键盘收起事件

代码实现

步骤1:监听输入框获得焦点事件

// 在Activity或Fragment中的onCreate方法中添加以下代码
EditText editText = findViewById(R.id.editText);

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (!hasFocus) {
            // 输入框失去焦点,处理键盘收起事件
        }
    }
});

步骤2:监听输入框失去焦点事件

// 在Activity或Fragment中的onCreate方法中添加以下代码
EditText editText = findViewById(R.id.editText);

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (!hasFocus) {
            // 输入框失去焦点,处理键盘收起事件
        }
    }
});

步骤3:处理键盘收起事件

// 在Activity或Fragment中的onCreate方法中添加以下代码
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        View v = getCurrentFocus();
        if (isShouldHideKeyboard(v, event)) {
            // 收起键盘的处理逻辑
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
        }
    }
    return super.dispatchTouchEvent(event);
}

private boolean isShouldHideKeyboard(View v, MotionEvent event) {
    if (v != null && (v instanceof EditText)) {
        int[] l = {0, 0};
        v.getLocationInWindow(l);
        int left = l[0],
                top = l[1],
                bottom = top + v.getHeight(),
                right = left + v.getWidth();
        return !(event.getX() > left && event.getX() < right
                && event.getY() > top && event.getY() < bottom);
    }
    return false;
}

现在,你已经学会如何监听系统键盘收起事件了,希望这篇文章对你有所帮助。继续努力,加油!