美文网首页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