如何在Android中通过ConstraintLayout实现随键盘变化的自适应空白区域
解决方案:用ConstraintLayout实现键盘适配的折叠效果
要实现类似Instagram登录页那种键盘弹出时空白区域自动折叠、收起后恢复原状的效果,其实用ConstraintLayout的**垂直链(Vertical Chain)**特性就能轻松搞定,核心就是靠layout_constraintVertical_chainStyle来控制布局的自适应分布。
实现思路
把页面顶部的空白占位组件(比如示例里的语言选择TextView)和中间的核心内容组件(Logo、标题、输入框等)串成一条垂直链,设置链的样式为spread。当键盘弹出时,屏幕可用的垂直空间会缩小,这条链会自动收缩空白区域的占比,让核心内容始终保持在可视范围内;等键盘收起后,链又会恢复原本的分布状态,回到初始的布局效果。
另外别忘了在AndroidManifest.xml里给对应的Activity加上这个配置,这是布局能响应键盘弹出/收起的前提:
android:windowSoftInputMode="adjustResize"
示例布局代码
<TextView android:id="@+id/z_img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:text="Language" app:layout_constraintBottom_toTopOf="@+id/imageView" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintVertical_chainStyle="spread" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="48dp" android:src="@drawable/insta" app:layout_constraintBottom_toTopOf="@+id/title_set_passcode" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/z_img" /> <android.support.v7.widget.AppCompatTextView android:id="@+id/title_set_passcode" style="@style/LightText.LargeText.Bold" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="16dp" android:text="Login form" app:layout_constraintBottom_toTopOf="@+id/il_login_passcode" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/imageView" />
(附设计图与效果展示图:)
内容的提问来源于stack exchange,提问作者beigirad
相关产品推荐
相关产品推荐

