public class ResizeLayout extends FrameLayout {
private OnkeyboardShowListener mChangedListener;
private boolean misKeyboardshow = false;
private RRSharedPreferences preferences;
private int keyboardHeight = DipUtil.calcFromDip(Config.DEFAULT_KEYBOARD_HIGHT);
private final int THRESHOLD = 100;
/**
* @param context
* @param attrs
*/
public ResizeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
preferences = new RRSharedPreferences(context);
}
public static interface OnkeyboardShowListener {
public void onKeyboardShow();
public void onKeyboardHide();
public void onKeyboardShowOver();
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
if (oldh - h > THRESHOLD) { //键盘弹出了
misKeyboardshow = true;
keyboardHeight = oldh - h;
preferences.putIntValue(Config.KEYBOARD_HIGHT, keyboardHeight);
if (mChangedListener != null) {
mChangedListener.onKeyboardShow();
}
} else if (h < oldh && misKeyboardshow) { //键盘变高了
if (keyboardHeight == DipUtil.calcFromDip(Config.DEFAULT_KEYBOARD_HIGHT)) {
preferences.getIntValue(Config.KEYBOARD_HIGHT, DipUtil.calcFromDip(Config.DEFAULT_KEYBOARD_HIGHT));
}
if (keyboardHeight != DipUtil.calcFromDip(Config.DEFAULT_KEYBOARD_HIGHT)) {
keyboardHeight += oldh - h;
preferences.putIntValue(Config.KEYBOARD_HIGHT, keyboardHeight);
}
if (mChangedListener != null) {
mChangedListener.onKeyboardShow();
}
} else if (h - oldh > THRESHOLD) { //键盘隐藏了
misKeyboardshow = false;
if (mChangedListener != null) {
mChangedListener.onKeyboardHide();
}
} else if (h > oldh && misKeyboardshow) { //键盘收缩了
if (keyboardHeight == DipUtil.calcFromDip(Config.DEFAULT_KEYBOARD_HIGHT)) {
preferences.getIntValue(Config.KEYBOARD_HIGHT, DipUtil.calcFromDip(Config.DEFAULT_KEYBOARD_HIGHT));
}
if (keyboardHeight != DipUtil.calcFromDip(Config.DEFAULT_KEYBOARD_HIGHT)) {
keyboardHeight -= h - oldh;
preferences.putIntValue(Config.KEYBOARD_HIGHT, keyboardHeight);
}
if (mChangedListener != null) {
mChangedListener.onKeyboardShow();
}
}
CommonUtil.log("NCS", "keyboard height:"+ keyboardHeight);
}
@Override
protected void onLayout(boolean changed, int left, int top, int right,
int bottom) {
super.onLayout(changed, left, top, right, bottom);
CommonUtil.log("NCS", "top:" + top + "--bottom:" + bottom);
if (mChangedListener != null && misKeyboardshow) {
mChangedListener.onKeyboardShowOver();
}
}
public boolean isKeyboardShowing() {
return misKeyboardshow;
}
public void setOnKeyboardShowListener(OnkeyboardShowListener listener) {
mChangedListener = listener;
}
}
Android监控软键盘变化实例
最新推荐文章于 2022-05-30 20:36:52 发布