安卓是没有提供监听软键盘的弹出与收回,所以我就考虑到用布局的变化来监听软键盘,
addOnLayoutChangeListener。
监听的是底部view的位置变化,要是软键盘弹出来的话,就会被顶上去,就会改变。
//监听软键盘是否弹出
viewEt.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
if (oldBottom != 0 && bottom != 0) {
if (oldBottom != bottom) {
// 输入布局向上移动屏幕的四分之一即视为软键盘弹出
if ((oldBottom - bottom) > getWindow().getDecorView().getRootView().getHeight() / 4) {
//弹出键盘 更改背景
imgTown.setVisibility(View.INVISIBLE);
viewEt.setVisibility(View.INVISIBLE);
// viewBg.setBackgroundColor(getResources().getColor(R.color.login_bg));
imgBg.setBackgroundResource(R.color.login_bg);
//当时好像有什么操作不能生效来,就用mHandler延迟一下发送到主线程去执行了
//要是碰到不执行的情况的话,就试试这种
mHandler.sendEmptyMessageDelayed(KEYBOARD_UP, 10);
} else {
//未弹出 收回
mHandler.sendEmptyMessageDelayed(KEYBOARD_DOWN, 10);
}
v.invalidate();
}
}
}
});