Android:检测软键盘打开

标签 android view scroll

当软键盘打开时,我希望 ScrollView 向下滚动到底部。

为此我可以使用:fullScroll(View.FOCUS_DOWN);

但是在软键盘打开事件触发后如何触发该命令?

最佳答案

这是我的解决方案:

1/一个简单的界面

public interface KeyboardVisibilityListener {
    void onKeyboardVisibilityChanged(boolean keyboardVisible);
}

2/一个实用方法(把它放在你想要的地方,例如在一个名为 KeyboardUtil 的类中)

public static void setKeyboardVisibilityListener(Activity activity, KeyboardVisibilityListener keyboardVisibilityListener) {
    View contentView = activity.findViewById(android.R.id.content);
    contentView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        private int mPreviousHeight;

        @Override
        public void onGlobalLayout() {
            int newHeight = contentView.getHeight();
            if (mPreviousHeight != 0) {
                if (mPreviousHeight > newHeight) {
                    // Height decreased: keyboard was shown
                    keyboardVisibilityListener.onKeyboardVisibilityChanged(true);
                } else if (mPreviousHeight < newHeight) {
                    // Height increased: keyboard was hidden
                    keyboardVisibilityListener.onKeyboardVisibilityChanged(false);
                } else {
                    // No change
                }
            }
            mPreviousHeight = newHeight;
        }
    });
}

3/以这种方式从 Activity 中使用(一个好地方在 onCreate):

KeyboardUtil.setKeyboardVisibilityListener(this, mKeyboardVisibilityListener);

关于Android:检测软键盘打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3081276/

相关文章:

javascript - 使用自定义滚动条进行视差滚动

android - 当用户在 android 中水平滚动时禁用垂直滚动

java - Jsoup - 如何选择元素内的元素

android - BLE 通知订阅获得 133

android - 插件冲突错误 : Admob and Fiebase Plugin

Grails - 将数据从 View 传递到 Controller

MySQL - 我的 View 很慢

ios - float View (就像在 Apple 库存邮件应用程序中一样)?

css - 使用移动设备的滚动延迟

android - 异步任务内存不足错误 : bitmap size exceeds VM budget