getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
int screenH = 0;
boolean isOpen;
private int getScreenHeight() {
if (screenH > 0) {
return screenH;
}
screenH = ((WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE))
.getDefaultDisplay().getHeight();
return screenH;
}
@Override
public void onGlobalLayout() {
Rect rect = new Rect();
getWindowVisibleDisplayFrame(rect);
screenH = getScreenHeight(); //屏幕高度
int keyH = screenH - rect.bottom; // 输入法的高度
boolean keyOpen = Math.abs(keyH) > screenH / 5;
if(isOpen!=keyOpen){
isOpen=keyOpen;
if(!isOpen){
cleanfocus();//键盘关闭清除当前控件焦点
}
}
}
});
public boolean onKeyIme(int keyCode,KeyEvent event){
if(keyCode==KeyEvent.KEYCODE_BACK&&event.getAction()==KeyEvent.ACTION_DOWN){
clearFocus();
return true;
}
return false;
}