📜  mainBottomSheet 消失键盘 (1)

📅  最后修改于: 2023-12-03 15:02:50.923000             🧑  作者: Mango

mainBottomSheet 消失键盘

在 Android 开发中,经常会遇到需要打开 Bottom Sheet 的场景。但是,在某些情况下,当我们打开 Bottom Sheet 时,当前页面上的键盘可能不会自动隐藏。这就会导致用户体验的问题。

为了解决这个问题,我们可以在打开 Bottom Sheet 时,手动隐藏键盘。

如何隐藏键盘?

在 Android 中,可以使用 InputMethodManager 类来控制键盘的显示和隐藏。我们可以使用 hideSoftInputFromWindow 方法来隐藏键盘:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);

其中,view.getWindowToken() 表示获取当前界面的焦点视图,0 表示不需要添加额外操作。

如何在打开 Bottom Sheet 时隐藏键盘?

当打开 Bottom Sheet 时,我们需要监听 Bottom Sheet 的展开和收起事件。这可以通过 BottomSheetBehavior 类实现。

1. 设置 Bottom Sheet

在设置 Bottom Sheet 布局时,我们需要获取到 Bottom Sheet 的 behavior 对象。我们可以通过 BottomSheetBehavior.from(view) 方法来获取:

View bottomSheet = findViewById(R.id.bottom_sheet);
BottomSheetBehavior<View> behavior = BottomSheetBehavior.from(bottomSheet);
2. 监听 Bottom Sheet 事件

在获取到 Bottom Sheet 的 behavior 对象后,我们就可以监听 Bottom Sheet 的状态变化了。我们可以通过 BottomSheetBehavior.BottomSheetCallback 接口来监听 Bottom Sheet 的展开和收起事件。

behavior.addBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {

    @Override
    public void onStateChanged(@NonNull View bottomSheet, int newState) {
        switch (newState) {
            case BottomSheetBehavior.STATE_HIDDEN:
            case BottomSheetBehavior.STATE_COLLAPSED:
                // 隐藏键盘
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
                break;
            case BottomSheetBehavior.STATE_EXPANDED:
                // do something
                break;
        }
    }

    @Override
    public void onSlide(@NonNull View bottomSheet, float slideOffset) {

    }

});

onStateChanged 方法中,我们可以根据 Bottom Sheet 的状态来执行相应的操作。当 Bottom Sheet 的状态为 STATE_HIDDENSTATE_COLLAPSED 时,我们可以调用 hideSoftInputFromWindow 方法来隐藏键盘。

参考文献