1、自定义View
public class ResizeLayout extends RelativeLayout {
public static final byte KEYBOARD_STATE_SHOW = -3;
public static final byte KEYBOARD_STATE_HIDE = -2;
public static final byte KEYBOARD_STATE_INIT = -1;
private boolean mHasInit = false;
private boolean mHasKeyboard = false;
private int mHeight;
private IOnKeyboardStateChangedListener onKeyboardStateChangedListener;
public ResizeLayout(Context context) {
super(context);
}
public ResizeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ResizeLayout(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
}
public void setOnKeyboardStateChangedListener(
IOnKeyboardStateChangedListener onKeyboardStateChangedListener) {
this.onKeyboardStateChangedListener = onKeyboardStateChangedListener;
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
if (!mHasInit) {
mHasInit = true;
mHeight = b;
if (onKeyboardStateChangedListener != null) {
onKeyboardStateChangedListener
.onKeyboardStateChanged(KEYBOARD_STATE_INIT);
}
} else {
mHeight = mHeight < b ? b : mHeight;
}
if (mHasInit && mHeight > b) {
mHasKeyboard = true;
if (onKeyboardStateChangedListener != null) {
onKeyboardStateChangedListener
.onKeyboardStateChanged(KEYBOARD_STATE_SHOW);
}
}
if (mHasInit && mHasKeyboard && mHeight == b) {
mHasKeyboard = false;
if (onKeyboardStateChangedListener != null) {
onKeyboardStateChangedListener
.onKeyboardStateChanged(KEYBOARD_STATE_HIDE);
}
}
}
public interface IOnKeyboardStateChangedListener {
public void onKeyboardStateChanged(int state);
}
}
Activity中:
implements IOnKeyboardStateChangedListener
ResizeLayout resizeLayout;
resizeLayout.setOnKeyboardStateChangedListener(this);
@Override
public void onKeyboardStateChanged(int state) {
switch (state) {
case ResizeLayout.KEYBOARD_STATE_HIDE:// 软键盘隐藏
talkLayout.setVisibility(View.INVISIBLE);
flGoKeyboard.setVisibility(View.VISIBLE);
break;
case ResizeLayout.KEYBOARD_STATE_SHOW:// 软键盘显示
talkLayout.setVisibility(View.VISIBLE);
flGoKeyboard.setVisibility(View.VISIBLE);
break;
default:
break;
}
}
2、直接使用系统的控件
relativeLayout.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int heightDiff = keyboardLay.getRootView().getHeight()
- keyboardLay.getHeight();
if (heightDiff > 100) { // 说明键盘是弹出状态
} else {
}
}
});