ConstraintLayout无法自适应多行EditText高度的问题求助
解决ConstraintLayout无法自适应EditText高度的问题
哈哈,这个坑我之前踩过!你的问题主要有两个关键点,调整一下就能完美解决:
问题根源
- 你给EditText设置了
android:lines="3",这个属性是强制固定显示行数,不管内容多少,EditText都会先占满3行高度,这就是ConstraintLayout提前占用空间的核心原因。 - ConstraintLayout默认对于
wrap_content的高度不会严格约束,会提前预留子View的最大可能高度,需要开启constrainedHeight来让它跟随实际内容高度变化。
修复步骤
移除EditText的固定行数设置
删掉android:lines="3",你已经配置了android:minLines="1"(初始单行显示)和android:maxLines="5"(最多扩展到5行),这两个属性完全能满足你的需求,不会让EditText提前占用多余空间。给ConstraintLayout添加约束高度属性
在你的ConstraintLayout标签里加上app:constrainedHeight="true",这个属性会让ConstraintLayout的wrap_content高度严格跟随子View的实际高度,而不是提前预留最大空间。额外检查外层CardView
确保你的外层CardView的android:layout_height="wrap_content",如果CardView是固定高度或者match_parent,那内部布局的自适应效果也会被外层限制。
修改后的完整布局代码
<android.support.constraint.ConstraintLayout android:id="@+id/constraintLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="8dp" app:constrainedHeight="true" <!-- 新增约束高度属性 --> app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintBottom_toBottomOf="parent" > <EditText android:id="@+id/etMessage" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginBottom="8dp" android:inputType="text|textCapSentences|textMultiLine" android:maxLength="200" android:maxLines="5" android:minLines="1" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"/> </android.support.constraint.ConstraintLayout>
这样修改后,EditText初始只会显示1行高度,随着你输入内容增多,它会自动扩展到最多5行,ConstraintLayout也会跟着EditText的实际高度自适应,不会再提前占用3行的空间啦!
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

