Android判断输入法是否弹出
2019-02-25 本文已影响0人
lipyhui
本文借鉴:https://blog.csdn.net/sinat_31311947/article/details/53899166。本文只做简单笔记,详情见博主博客!
感谢博主分享!
简介
一、有缺陷判断方式
各大博客提供各种方式来判断输入法是否处于弹出的状态,在某些特定状态下,会出现判断错误的情况,此处不多说这些方式。
我使用的是如下方法来判断输入法是否弹出,但同样有缺陷。缺陷原因是我们平台的Android系统升级到9.0之后,支持自配置是显示虚拟导航栏,还是手势返回等操作。这时通过getWindow().getDecorView().getHeight();获取的高度为屏幕的物理高度,而非应用的高度,因此出现判断错误的状况!
private boolean isInputMethodShowing() {
//获取当前屏幕内容的高度
int screenHeight = getWindow().getDecorView().getHeight();
//获取View可见区域的bottom
Rect rect = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
return screenHeight - rect.bottom != 0;
}
二、修正方式
之前担心减去底部导航栏会导致以前的系统出现问题,后看了博主博客后果断尝试了一下,经测试不影响老板系统的正常使用!修正后的方式如下:
private boolean isInputMethodShowing() {
//获取当前屏幕内容的高度
int screenHeight = getWindow().getDecorView().getHeight();
//获取View可见区域的bottom
Rect rect = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
return screenHeight - rect.bottom - getSoftButtonsBarHeight() != 0;
}
/**
* 底部虚拟按键栏的高度
* @return
*/
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private int getSoftButtonsBarHeight() {
DisplayMetrics metrics = new DisplayMetrics();
//这个方法获取可能不是真实屏幕的高度
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int usableHeight = metrics.heightPixels;
//获取当前屏幕的真实高度
getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
int realHeight = metrics.heightPixels;
if (realHeight > usableHeight) {
return realHeight - usableHeight;
} else {
return 0;
}
}
据说小米mix2s有问题,但是由于本人没法弄到mix2s,所以没法调试问题。如果有其他机型同样有问题,欢迎反馈!谢谢!