当EditText获取到焦点,键盘弹出,为保证EditText不被遮挡,activity的布局会做一些调整,<activity>的windowSoftInputMode属性便控制此时activity的布局如何调整。
windowSoftInputMode常用两个值,分别是 adjustResize, adjustPan
adjustResize当键盘弹出时,从下往上压缩activity布局,压缩的距离等于键盘的高度。压缩之后,不管EditText是否可见。
adjustPan当键盘弹出时,如果EditText被键盘遮挡,activity内容从下向上滚动,以保证EditText不被键盘遮挡;如果EditText不被遮挡,则不滚动。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:layout_marginTop="300dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:layout_marginTop="200dp"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="alignParentBottom"
android:background="@android:color/holo_blue_bright"/>
</RelativeLayout>
界面效果:
- <activity> windowSoftInputMode=“adjustResize”,弹出键盘:
键盘弹出,activity从下而上压缩到键盘上边空间区域大小,由于TextView是alignParentBottom底部对齐的,所以出现被键盘顶上去的效果。
如果xml中最外层布局是LinearLayout,压缩之后,由于可见空间不足以展示所有内容,TextView就会被键盘遮挡。
- <activity> windowSoftInputMode=“adjustPan”,弹出键盘:
键盘弹出,由于EditText到底部的距离小于键盘的高度,所以,activity的内容整体向上滚动,以使EditText不给遮挡。
如果EditText到底部的距离大于键盘高度,activity内容不会滚动。