- 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;
- }
- }
来源: http://www.phpxs.com/code/1002192/