页面有输入框时都要考虑会不会被键盘挡住,于是fitsSystemWindows属性就派上了用场
属性说明
fitsSystemWindows属性可以让view根据系统窗口来调整自己的布局;简单点说就是我们在设置应用布局时是否考虑系统窗口布局,这里系统窗口包括系统状态栏、导航栏、输入法等,包括一些手机系统带有的底部虚拟按键。
android:fitsSystemWindows=”true” (触发View的padding属性来给系统窗口留出空间)
这个属性可以给任何view设置,只要设置了这个属性此view的其他所有padding属性失效,同时该属性的生效条件是只有在设置了透明状态栏(StatusBar)或者导航栏(NavigationBar)此属性才会生效。
注意⚠️: fitsSystemWindows只作用在Android4.4及以上的系统,因为4.4以下的系统StatusBar没有透明状态。
应用场景
在不同Android版本下,App状态栏和不同版本中系统本身的状态栏的适配;
兼容带有底部虚拟按键的手机系统。
摘抄自 https://www.cnblogs.com/xgjblog/p/9517645.html
遇到的坑
当一个页面里面不止一个输入框时,例如BaseActivity里面很多地方需要适应键盘弹出,那么只有最上面设置android:fitsSystemWindows=”true”的会生效,下面的就不生效了,为了解决这个问题需要在代码中动态控制一下
//位于上面的view
viewTop.setFitsSystemWindows(false);
//位于下面的组件
viewBottom.setFitsSystemWindows(true);