美文网首页Android软键盘
Android判断键盘弹出状态并隐藏

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

作者: 那个阳光下奔跑的少年 | 来源:发表于2016-10-25 10:15 被阅读1050次

最近遇到一个问题,就是无法监控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);

        }
    }

相关文章

网友评论

  • 梦飞成2012:InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
    //隐藏软键盘 //
    imm.hideSoftInputFromWindow(et_edit.getWindowToken(), 0);

    第五条这个隐藏键盘的,亲测有效,其他的感觉不准,尤其是判断键盘是否展示的,不准确!

本文标题:Android判断键盘弹出状态并隐藏

本文链接:https://www.haomeiwen.com/subject/knlruttx.html