package com.danbistudio.apps.view; import android.content.Context; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.View; import android.view.ViewTreeObserver; import android.widget.RelativeLayout; /** * Created by quangdh on 8/13/15. */ public class ResizeRelativeLayout extends RelativeLayout implements ViewTreeObserver.OnGlobalLayoutListener{ OnResizeLayout mOnResizeLayout = null; private boolean isKeyboardShown = false; private int currentHeight = Integer.MAX_VALUE; public void setOnResizeLayout(OnResizeLayout mOnResizeLayout){ this.mOnResizeLayout = mOnResizeLayout; } public ResizeRelativeLayout(Context context) { super(context); getViewTreeObserver().addOnGlobalLayoutListener(this); } public ResizeRelativeLayout(Context context, AttributeSet attrs) { super(context, attrs); getViewTreeObserver().addOnGlobalLayoutListener(this); } public ResizeRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); getViewTreeObserver().addOnGlobalLayoutListener(this); } public ResizeRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); getViewTreeObserver().addOnGlobalLayoutListener(this); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { final int proposedheight = MeasureSpec.getSize(heightMeasureSpec); final int actualHeight = getHeight(); Log.i("ResizeRelativeLayout","onMeasure()... "+proposedheight+" "+ actualHeight); if(mOnResizeLayout != null) { if (actualHeight > proposedheight) { if (!isKeyboardShown) { isKeyboardShown = true; mOnResizeLayout.onSoftKeyboardShow(); } } } super.onMeasure(widthMeasureSpec, heightMeasureSpec); } @Override public boolean dispatchKeyEventPreIme(KeyEvent event) { if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) { if(mOnResizeLayout != null) { if (isKeyboardShown) { isKeyboardShown = false; mOnResizeLayout.onSoftKeyboardHide(); } } } return super.dispatchKeyEventPreIme(event); } @Override public void onGlobalLayout() { int rootViewHeight = getRootView().getHeight(); Log.i("ResizeRelativeLayout","onGlobalLayout()... "+rootViewHeight + " ... " +currentHeight); if(rootViewHeight > currentHeight){ if(mOnResizeLayout != null) { if (isKeyboardShown) { isKeyboardShown = false; mOnResizeLayout.onSoftKeyboardHide(); } } } currentHeight = rootViewHeight; } public interface OnResizeLayout{ public void onSoftKeyboardShow(); public void onSoftKeyboardHide(); } }