如何在 Android 中定义 EditText 的不同颜色和宽度

How to define a different color and width of an EditText in Android

这就是我为 EditText 添加边框的方法。我怎样才能只在 EditText 的 3 边添加边框,并为每个边框定义不同的颜色和宽度?

EditText editText = new EditText(this);
editText.setText("Find");
editText.setWidth(555);

GradientDrawable border = new GradientDrawable();
border.setColor(0xFFFFFFFF);  // white background
border.setStroke(1, 0xFF000000);  // black border with full
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
    editText.setBackgroundDrawable(border);
} else {
    editText.setBackground(border);
}

我的以下尝试无效:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#FF0000" />
        </shape>
    </item>
    <item android:right="5dp">
        <shape android:shape="rectangle">
            <solid android:color="#FFFF" />
        </shape>
    </item>
    <item android:left="22dp">
        <shape android:shape="rectangle">
            <solid android:color="#746565" />
        </shape>
    </item>
</layer-list>

Vielen dank im voraus.

创建一个图层列表可绘制对象并定义 3 个具有自定义宽度和颜色的不同矩形形状,并隐藏每个形状的 3 个边以仅显示一个边。像这样:

my_edittext_border.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list android:paddingLeft="30dp" xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:bottom="-1dp"
        android:left="-1dp"
        android:right="-1dp">
        <shape android:shape="rectangle">
            <stroke
                android:width="1dp"
                android:color="#ff0000" />
        </shape>
    </item>

    <item
        android:bottom="-3dp"
        android:right="-3dp"
        android:top="-3dp">
        <shape android:shape="rectangle">
            <stroke
                android:width="3dp"
                android:color="#11ee66" />
        </shape>
    </item>

    <item
        android:bottom="-5dp"
        android:left="-5dp"
        android:top="-5dp">
        <shape android:shape="rectangle">
            <stroke
                android:width="5dp"
                android:color="#0000ff" />
        </shape>
    </item>
</layer-list>

现在将此可绘制对象设置为您的 EditText 背景:

android:background="@drawable/my_edittext_border"

将此可绘制对象设置为背景并根据您的选择进行修改:

<?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <!--Top border-->
        <item
            android:bottom="-2dp"
            android:left="-2dp"
            android:right="-2dp"
            android:top="0dp">
            <shape android:shape="rectangle">
                <stroke
                    android:width="2dp"
                    android:color="@color/black" />
            </shape>
        </item>
        <!--Bottom border-->
        <item
            android:bottom="0dp"
            android:left="-2dp"
            android:right="-2dp"
            android:top="-2dp">
            <shape android:shape="rectangle">
                <stroke
                    android:width="2dp"
                    android:color="@color/orange" />
            </shape>
        </item>
        <!--Right border-->
        <item
            android:bottom="-2dp"
            android:left="-2dp"
            android:right="0dp"
            android:top="-2dp">
            <shape android:shape="rectangle">
                <stroke
                    android:width="2dp"
                    android:color="@color/remove" />
            </shape>
        </item>
        <!--Left border-->
        <item
            android:bottom="-2dp"
            android:left="0dp"
            android:right="-2dp"
            android:top="-2dp">
            <shape android:shape="rectangle">
                <stroke
                    android:width="2dp"
                    android:color="@color/green" />
            </shape>
        </item>
    </layer-list>

最重要的是,您还可以使用 vector drawable 来绘制:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="200px"
    android:width="200px"
    android:viewportHeight="150"
    android:viewportWidth="200">
    <path
        android:strokeColor="@android:color/black"
        android:strokeWidth="1"
        android:pathData="M0,0  L100,0 "/>
    <path
        android:strokeColor="@android:color/white"
        android:strokeWidth="1"
       android:pathData="M100,0  L100,100 "/>
    <path
        android:strokeColor="@android:color/holo_red_light"
        android:strokeWidth="1"
        android:pathData="M100,100  L0,100 "/>
    <path
        android:strokeColor="@android:color/holo_green_dark"
        android:strokeWidth="1"
        android:pathData="M0,100  L0,0 "/>

</vector>