您的位置:首页 > 其它

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

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

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

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐