Android适配底部虚拟键盘遮挡布局的解决方案
16lz
2022-03-13
public class AndroidBug54971Workaround { // For more information, see https://code.google.com/p/android/issues/detail?id=5497 // To use this class, simply invoke assistActivity() on an Activity that already has its content view set. public static void assistActivity(View viewObserving) { new AndroidBug54971Workaround(viewObserving); } private View mViewObserved;//被监听的视图 private int usableHeightPrevious;//视图变化前的可用高度 private ViewGroup.LayoutParams frameLayoutParams; private AndroidBug54971Workaround(View viewObserving) { mViewObserved = viewObserving; //给View添加全局的布局监听器 mViewObserved.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { public void onGlobalLayout() { resetLayoutByUsableHeight(computeUsableHeight()); } }); frameLayoutParams = mViewObserved.getLayoutParams(); } private void resetLayoutByUsableHeight(int usableHeightNow) { //比较布局变化前后的View的可用高度 if (usableHeightNow != usableHeightPrevious) { //如果两次高度不一致 //将当前的View的可用高度设置成View的实际高度 frameLayoutParams.height = usableHeightNow; mViewObserved.requestLayout();//请求重新布局 usableHeightPrevious = usableHeightNow; } } private int computeUsableHeight() { Rect r = new Rect(); mViewObserved.getWindowVisibleDisplayFrame(r); return (r.bottom - r.top); }}
使用:
//setContentView之后AndroidBug54971Workaround.assistActivity(findViewById(android.R.id.content));
更多相关文章
- 移动网站开发中常用的10段JavaScript代码
- listView 中relativeLayout 布局的 android:layout_alignParentB
- Android快速开发-选项卡
- android:屏幕自适应
- android检测当前网络是否可用
- 欢迎使用CSDN-markdown编辑器
- Android中文API (109) —— SimpleCursorTreeAdapter
- 获取android顶部状态栏高度的两种方式
- Android(安卓)Studio初步使用及HelloWorld详解