开发中,有时候退出界面的时候,如果键盘弹出的情况下,需要先关闭键盘,然后再退出Activity的话,改如何操作呢,请看下面的几种方式 ?
if (inputMethodManager.isActive(editText)) {
Toast.makeText(MainActivity.this, "显示", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.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;
}
}