安卓开发——如何判断软键盘是否弹出(显示)

来源:互联网 发布:浙大网络线怎么用 mac 编辑:程序博客网 时间:2024/06/05 17:51

在开发中涉及到了如下情况:表情界面与软键盘只显示其一,与当前主流社交软件的逻辑一致。

这时就需要根据情况获取当前软键盘是否处于弹出状态,网上搜了搜,都是一些拷贝来拷贝去的无用办法,如:

1、

if(getWindow().getAttributes().softInputMode == WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE){      Toast.makeText(Main3Activity.this, "显示", Toast.LENGTH_SHORT).show();  }else {      Toast.makeText(Main3Activity.this, "没显示", Toast.LENGTH_SHORT).show();  }

无卵用。

2、

if(inputMethodManager.isActive(editText)){      Toast.makeText(Main3Activity.this, "显示", Toast.LENGTH_SHORT).show();  }else {      Toast.makeText(Main3Activity.this, "没显示", Toast.LENGTH_SHORT).show();  }
这个办法弊病在于只要editText有焦点,就一直是true,然而并不是editText获得焦点键盘就会弹出。无卵用。

由于谷歌官方并没有提供与判断软键盘是否弹出的相关方法,只能通过计算布局高度来解决:

private boolean isSoftShowing() {        //获取当前屏幕内容的高度        int screenHeight = getWindow().getDecorView().getHeight();        //获取View可见区域的bottom        Rect rect = new Rect();        //DecorView即为activity的顶级view        getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);        //考虑到虚拟导航栏的情况(虚拟导航栏情况下:screenHeight = rect.bottom + 虚拟导航栏高度)        //选取screenHeight*2/3进行判断        return screenHeight*2/3 > rect.bottom;    }
这里面用了一个巧方法,就是选取屏幕高度的2/3来判断,如果你觉得这个不靠谱的话,也可以获取到虚拟导航栏的高度,进行相应判断。

附上获取导航栏的方法:

/**    * 底部虚拟按键栏的高度    * @return    */    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)    private int getSoftButtonsBarHeight() {        DisplayMetrics metrics = new DisplayMetrics();        //这个方法获取可能不是真实屏幕的高度        mActivity.getWindowManager().getDefaultDisplay().getMetrics(metrics);        int usableHeight = metrics.heightPixels;        //获取当前屏幕的真实高度        mActivity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics);        int realHeight = metrics.heightPixels;        if (realHeight > usableHeight) {            return realHeight - usableHeight;        } else {            return 0;        }    }



原创粉丝点击