监听全局键盘的弹出与隐藏状态

android自带的监听方法不靠谱,可以通过根view的可见高度来判断键盘的显示与隐藏状态,但不适应于activity为全屏的状态。

wholeLayout.getViewTreeObserver().addOnGlobalLayoutListener(globalLayoutListener);

 /**
 * 全局监听软键盘的显示状态
 */
private ViewTreeObserver.OnGlobalLayoutListener globalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {

    @Override
    public void onGlobalLayout() {
        // 应用可以显示的区域。此处包括应用占用的区域,包括标题栏不包括状态栏
        Rect r = new Rect();
        wholeLayout.getWindowVisibleDisplayFrame(r);
        // 键盘最小高度
        int minKeyboardHeight = 150;
        // 屏幕高度,不含虚拟按键的高度
        int screenHeight = wholeLayout.getRootView().getHeight();
        // 获取状态栏高度
        int statusBarHeight = r.top;
        // 在不显示软键盘时,height等于状态栏的高度
        int height = screenHeight - (r.bottom - r.top);
        //Log.i("wyy", "onGlobalLayout: height = " + height + ", staheight  =" + statusBarHeight + ", r.top = " + r.top + ", r.bottom = " + r.bottom);

        if (ShowKeyboard) {
            // 如果软键盘是弹出的状态,并且height小于等于状态栏高度,
            // 说明这时软键盘已经收起
            if (height - statusBarHeight < minKeyboardHeight) {
                //ToastUtils.showToast(GoodsAllStockActivity.this, "键盘隐藏了");
                resetAnimation();
                ShowKeyboard = false;
                if (!searchEditText.getText().toString().equals("")) {
                    gotoSearch();
                }
            }
        } else {
            // 如果软键盘是收起的状态,并且height大于状态栏高度,
            // 说明这时软键盘已经弹出
            if (height - statusBarHeight > minKeyboardHeight) {
                ShowKeyboard = true;
                //ToastUtils.showToastToastUtils.showToast(GoodsAllStockActivity.this,"键盘显示了");
            }
        }
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值