如何让EditText填充两个Button间空间且Button隐藏时位置不变?
我来帮你搞定这个Android布局的问题,刚好之前我也处理过类似的需求,咱们一步步来解决:
我们需要解决三个核心点:让EditText填满button2和button3之间的空间、给EditText加个清晰的输入边框、保证button2不可见时EditText位置不动,同时还要适配各种屏幕尺寸。下面是具体的实现方案:
1. 调整EditText的约束和尺寸,实现空间填充
你原来的EditText高度是wrap_content,而且没和button2的底部绑定,所以没法占满中间的空间。咱们改这几点:
- 把EditText的
layout_height改成0dp(也就是ConstraintLayout里的match_constraint),这样它会根据上下的约束自动填满剩余空间 - 加上
app:layout_constraintTop_toBottomOf="@+id/button2",把EditText的顶部和button2的底部牢牢绑在一起 - 保留原来的底部约束
app:layout_constraintBottom_toTopOf="@+id/count",让EditText底部和计数的TextView衔接上
2. 给EditText加边框,明确输入区域
咱们用自定义的shape drawable来做边框,这样既灵活又兼容各种版本。首先在res/drawable文件夹里新建一个edittext_border.xml文件,内容如下:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <!-- 填充白色,避免和背景冲突 --> <solid android:color="#ffffff"/> <!-- 边框的宽度和颜色,你可以根据需求修改 --> <stroke android:width="1dp" android:color="#cccccc"/> <!-- 加个小圆角,看起来更舒服 --> <corners android:radius="4dp"/> <!-- 内边距,让输入的文字不贴着边框 --> <padding android:left="8dp" android:top="8dp" android:right="8dp" android:bottom="8dp"/> </shape>
然后在EditText里引用这个背景:android:background="@drawable/edittext_border",这样清晰的输入边框就有了。
3. 保证button2不可见时EditText位置不变
如果button2设置成invisible,它还会占着布局空间,EditText位置自然不会变;但如果设置成gone(完全隐藏不占空间),咱们就得加个app:layout_goneMarginTop="10dp",这样button2消失后,EditText依然保持原来的顶部间距,位置就不会跑偏了。
修改后的完整布局代码
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/selecmain" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff"> <Button android:id="@+id/button1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="50dp" android:layout_marginTop="10dp" android:layout_marginEnd="50dp" android:elevation="5dp" android:textAlignment="center" android:textColor="#514e4e" android:textSize="20sp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> <Button android:id="@+id/button2" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:elevation="5dp" android:textAlignment="center" android:textColor="#514e4e" android:textSize="20sp" app:layout_constraintLeft_toLeftOf="@+id/button1" app:layout_constraintRight_toRightOf="@+id/button1" app:layout_constraintTop_toBottomOf="@+id/button1" /> <EditText android:id="@+id/et" android:layout_width="0dp" android:layout_height="0dp" android:layout_marginStart="50dp" android:layout_marginTop="10dp" android:layout_marginEnd="50dp" android:background="@drawable/edittext_border" android:gravity="top|left" android:hint="Write something here." android:maxLength="140" android:textSize="25sp" app:layout_constraintBottom_toTopOf="@+id/count" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/button2" app:layout_goneMarginTop="10dp" /> <TextView android:id="@+id/count" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:layout_marginEnd="10dp" android:text="140/140" app:layout_constraintBottom_toTopOf="@+id/button3" app:layout_constraintRight_toRightOf="parent" /> <Button android:id="@+id/button3" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:enabled="false" android:elevation="5dp" android:onClick="setBtnRecord" android:text="Record" android:textAlignment="center" android:textColor="#FFFFFF" android:textSize="20sp" android:visibility="visible" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="@id/button2" app:layout_constraintRight_toRightOf="@id/button2" /> </android.support.constraint.ConstraintLayout>
最后再划几个重点
- 用
0dp作为EditText的高度,结合上下约束,能让它自动填满button2和计数TextView之间的所有空间,不管屏幕大小都能完美适配 - 自定义的shape背景不仅实现了清晰的边框,还通过padding让输入体验更舒适
layout_goneMarginTop这个属性特别实用,能保证button2完全隐藏时,EditText的位置丝毫不差
内容的提问来源于stack exchange,提问作者Simon Hui
相关产品推荐
相关产品推荐

