Android監控軟鍵盤變化實例

b5pp 9年前發布 | 953 次閱讀 Java Android

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;
}

}</pre>

 本文由用戶 b5pp 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!