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

Android开发如何实现EditText控件正方形边框效果

Android正方形带边框EditText实现方案

你当前的实现不是正方形是因为EditText宽高设为wrap_content会跟随内容长度变化,drawable形状默认适配控件尺寸,不会强制正方形,可通过以下三种方案调整:


方案1:固定宽高(简单直接,适合固定尺寸场景)

直接将EditText的宽高设置为相同的固定值即可,可额外添加android:gravity="center"让输入内容居中显示:

<EditText
    android:layout_width="80dp"
    android:id="@+id/codeFirst"
    android:padding="@dimen/appbar_padding"
    android:layout_height="80dp"
    android:background="@drawable/edittext_border"
    android:gravity="center"
    android:lines="2"/>

你原有绑定的edittext_border drawable代码无需修改。


方案2:ConstraintLayout宽高比约束(适配性强,推荐响应式场景)

如果外层使用ConstraintLayout布局,可通过宽高比属性强制控件为1:1正方形,无需写死尺寸,可自动适配父布局大小:

<EditText
    android:id="@+id/codeFirst"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:background="@drawable/edittext_border"
    android:padding="@dimen/appbar_padding"
    android:gravity="center"
    android:lines="2"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    <!-- 宽度占父布局宽度的20%,可按需调整 -->
    app:layout_constraintWidth_percent="0.2"
    <!-- 强制宽高比为1:1 保持正方形 -->
    app:layout_constraintDimensionRatio="1:1"/>

方案3:自定义EditText(适合全局复用、动态适配场景)

重写EditText的onMeasure方法,强制宽高始终相等:

class SquareEditText @JvmOverloads constructor(
    context: Context, attrs: AttributeSet? = null
) : androidx.appcompat.widget.AppCompatEditText(context, attrs) {
    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec)
        // 取宽高中的较小值作为统一尺寸,也可按需取较大值
        val squareSize = measuredWidth.coerceAtMost(measuredHeight)
        setMeasuredDimension(squareSize, squareSize)
    }
}

布局中直接使用自定义控件即可,宽高设为wrap_content也会自动变为正方形。

内容的提问来源于stack exchange,提问作者Malo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:57:04