Android判断键盘弹出状态并隐藏

最近遇到一个问题,就是无法监控Android输入法是否弹出,网上找了好多办法,有监听global layout大小变化的,代码如下

    private void addKeybordListener() {
        // 监听global layout的大小变化
        final View activityRootView = findViewById(R.id.root);    //此处是你页面根布局
        activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight();
                if (heightDiff > 100) { // 高度变小100像素则认为键盘弹出
                    // 这里执行需要的处理

                } 
            }
        });

但是这种监听的弊端就是只能进来页面监听一次,无法根据点击一个按钮时判断出键盘是否弹出,后来我想通过一个布尔的变量,keyboardShow判断键盘现在是否显示,但是这样控制逻辑很麻烦,也容易出错,后来找到一个简单方式,就是获取InputMethodManager,根据它的isActive判断键盘是否显示,代码如下:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        if (imm.isActive()) {   //如果为true,则是键盘正在显示
            HideKeyboard(mEtOrg); //隐藏键盘
        }

隐藏键盘代码如下

// 隐藏虚拟键盘
    public static void HideKeyboard(View v) {
        InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        if (imm.isActive()) {
            imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0);

        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容