如上图, 现在我们要实现一个评论说说的 功能,首先我们看下布局:
在布局的最底部,有一个LinearLayout ,包含我们评论的Edittext .现在我们要实现的是解决当Edittext获得焦点的时候 ,键盘遮挡Edittext的问题。
首先我们想到的是,在清单文件中加入adjustPan
android:windowSoftInputMode="adjustPan"
然而我们会发现,布局整体往上移,用户体验非常不好。
来说一下我的实现办法:
首先必须要有一个Scrollview去包裹布局,除了,底部edittext布局
android:fitsSystemWindows="true"
android:background="@android:color/holo_green_light"
然后这两行才是关键 。 在根布局加上上面两个属性。
android 布局xml中 android:fitsSystemWindows="true"的原文解析为:
Boolean internal attribute to adjust view layout based on system windows such as the status bar. If true, adjusts the padding of this view to leave space for the system windows. Will only take effect if this view is in a non-embedded activity.
内置的一个布尔值属性,通过其去调整基于系统窗口的视图布局,例如状态栏,如果该值为真,调整这个视图的内边距与系统窗口的距离,只有该view是non-embedded(非嵌入的)的activity才会产生影响。
即在开放过程中设计应用程序布局时当考虑当系统窗口的影响时,设置该值,如果为true,将自动调整系统窗口布局来适应你自定义的布局。例如:当系统有状态栏,你的应用也存在状态栏时便可以设置为ture。
关键上面两个属性,还有需要在其他子布局添加背景,不然就跟随了最外层的背景,代码部分还是采用网上通用方案,只是不需要自定义的状态栏了,也不需要计算状态栏的高度,也不需要在清单文件中添加属性了。