Android适配底部虚拟键盘遮挡布局的解决方案
16lz
2021-01-23
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));
更多相关文章
- Android参数设置父布局集体宽高
- Android 四大组件,五大存储,六大布局
- android 布局随笔----用户登录界面
- android五种布局模式
- Android的布局管理器与java中的实现方式不同
- 获取android顶部状态栏高度的两种方式
- 布局管理器
- 如何实现Android 布局背景模糊化处理