private ViewTreeObserver.OnGlobalLayoutListener mLayoutChangeListener;private boolean mIsSoftKeyboardShowing = false;@Overridepublic void onCreate(Bundle saveBundleInstance){    super.onCreate(saveBundleInstance);    setContentView(R.layout.login_activity);    mLayoutChangeListener = new ViewTreeObserver.OnGlobalLayoutListener() {        @Override        public void onGlobalLayout() {            //判断窗口可见区域大小            Rect r = new Rect();            getWindow().getDecorView().getWindowVisibleDisplayFrame(r);            Point point = new Point();            getWindowManager().getDefaultDisplay().getSize(point);            final int screenHeight = point.y;            //如果屏幕高度和Window可见区域高度差值大于整个屏幕高度的1/3,则表示软键盘显示中,否则软键盘为隐藏状态            int heightDifference = screenHeight - r.bottom;            Log.i(TAG, "the keyboard height is " + heightDifference);            boolean isKeyboardUp = heightDifference > (screenHeight - r.top)/3;            if (isKeyboardUp && ! mIsSoftKeyboardShowing){                Log.i(TAG, "keyboard up");                mIsSoftKeyboardShowing = true;                adjustLayoutDependKeyboard(true, heightDifference);            }else if(!isKeyboardUp && mIsSoftKeyboardShowing){                Log.i(TAG, "keyboard down");                mIsSoftKeyboardShowing = false;                adjustLayoutDependKeyboard(false, heightDifference);            }        }    };    //设置一个监听,用于捕获键盘的弹出    getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(mLayoutChangeListener);}/** * 设置中间布局 * @param isVisible * @param keyboardHeight */void adjustLayoutDependKeyboard(boolean isVisible, int keyboardHeight){    LinearLayout middleLayout = (LinearLayout) findViewById(R.id.middle_layout);    FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) middleLayout.getLayoutParams();    if (isVisible){        params.gravity = Gravity.BOTTOM;        params.bottomMargin = 10+keyboardHeight;    }else{        params.gravity = Gravity.CENTER;        params.bottomMargin = 0;    }    middleLayout.setLayoutParams(params);}@Overridepublic void onDestroy(){    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN){        getWindow().getDecorView().getViewTreeObserver().removeOnGlobalLayoutListener(mLayoutChangeListener);    }else{        getWindow().getDecorView().getViewTreeObserver().removeGlobalOnLayoutListener(mLayoutChangeListener);    }    super.onDestroy();

}

参考文献:http://blog.csdn.net/ccpat/article/details/46730771

更多相关文章

  1. Android:获取状态栏高度
  2. Android(安卓)打开软键盘
  3. android根据字体大小设置控件高度
  4. EditText 键盘收回
  5. Android软键盘弹出时不把布局顶上去的解决方法
  6. android获得屏幕高度和宽度
  7. 输入法弹出后,不影响activity原有布局(android:windowSoftInputMo
  8. Edittext输入框限制字母数字
  9. Android中visibility属性VISIBLE、INVISIBLE、GONE的区别

随机推荐

  1. WebWork2教程(中文版)(4.1.1)
  2. html网页制作小试
  3. 如何实现图片的动态切换(间隔几秒就切换下
  4. Html5 舞动的雨伞
  5. iframe调用后台方法通过response返回html
  6. HTML5之MSE标准为移动端的直播应用带来超
  7. 手机端阻止页面滑动
  8. js去除字符串中所有html标签及&nbsp符号
  9. HTML5中window.postMessage,在两个页面之
  10. 如何集中无序列表?