Android软键盘

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

2016-10-25  本文已影响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);

        }
    }
上一篇下一篇

猜你喜欢

热点阅读