You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让EditText填充两个Button间空间且Button隐藏时位置不变?

我来帮你搞定这个Android布局的问题,刚好之前我也处理过类似的需求,咱们一步步来解决:

实现Button间填充式EditText并适配布局

我们需要解决三个核心点:让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:19:08