Android EditText 的自定义可绘制背景

Custom drawable background for Android EditText

我想为 Android 布局中的 EditText 组件创建自定义可绘制背景。这应该包括一个跨越 EditText 整个长度的下边框,以及两端连接的 2 条垂直线,它们占高度的 25%,如下所示:

文本本身将使用 android:gravity="left|center",并在 left/top/bottom 上留出少量边距。

我已经能够在其他输入文本元素上创建自定义边框,希望使用如下形状包含所有边框:

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid
        android:color="@android:color/transparent"/>

    <corners
        android:bottomRightRadius="4dp"
        android:bottomLeftRadius="4dp"
        android:topLeftRadius="4dp"
        android:topRightRadius="4dp"/>
    <stroke
        android:color="@color/lightgrey"
        android:width="1dp"/>
</shape>

但是,现在我不想要一个完整的矩形,只需要 1 个完整边 + 2 个部分边。

实现该目标的两个步骤:

  • 通过使用 android:left|right|top.
  • 添加负插图移除顶部、右侧和左侧边框,仅保留底部边框
  • 为边项添加新的矩形:调整left/right相关重力,并将高度限制到你想要的大小(这里设置为8dp):
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <!--    Bottom border -->
    <item
        android:left="-50dp"
        android:right="-50dp"
        android:top="-50dp">
        <shape android:shape="rectangle">
            <stroke
                android:width="1dp"
                android:color="@color/lightgrey" />
        </shape>

    </item>

    <!--    Left border -->
    <item
        android:height="8dp"
        android:gravity="left|bottom">
        <shape android:shape="rectangle">
            <solid android:color="@color/lightgrey" />
            <size android:width="1dp" />
        </shape>
    </item>

    <!--    Right border -->
    <item
        android:height="8dp"
        android:gravity="right|bottom">
        <shape android:shape="rectangle">
            <solid android:color="@color/lightgrey" />
            <size android:width="1dp" />
        </shape>
    </item>

</layer-list>

这是结果