android 键盘弹起 UI上移
16lz
2021-12-04
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
更多相关文章
- Android:获取状态栏高度
- Android(安卓)打开软键盘
- android根据字体大小设置控件高度
- EditText 键盘收回
- Android软键盘弹出时不把布局顶上去的解决方法
- android获得屏幕高度和宽度
- 输入法弹出后,不影响activity原有布局(android:windowSoftInputMo
- Edittext输入框限制字母数字
- Android中visibility属性VISIBLE、INVISIBLE、GONE的区别