Android EditText带有内部线条的背景

4
我正在为我的EditText创建背景,我想在文本下方添加一条线。
我的背景代码:
<item android:state_pressed="true" android:state_focused="true">
    <shape>
        <solid android:color="#10FFFFFF" />
        <corners android:radius="5dp" />
    </shape>
</item>

如何在形状内添加线条?
图形项目预览:enter image description here

最好的方法是创建一个空矩形(将实心设置为透明,将描边设置为所需颜色),并使用负偏移量“推”掉其顶部、左侧和右侧边缘。请参见此链接:https://dev59.com/fmIk5IYBdhLWcg3we-H5#19239478 - Krylez
你可以创建一个9-patch图像,并手动绘制一条线。或者,如果你想要更多地进行编程,你可以创建自己的EditText来绘制线条:https://dev59.com/XFfUa4cB1Zd3GeqPEhq4#6111460 - Brian
2个回答

17

试试这个(答案可以通过编辑Krylez发布的帖子找到)。 我已经测试过了,它可以工作。在drawable文件夹中创建一个XML文件,并根据需要设置颜色。然后将其设置为EditText的背景。

<?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="@android:color/transparent" /> <!--background color of box-->
        </shape>
    </item>

    <item
        android:top="-2dp"
        android:right="-2dp"
        android:left="-2dp">
        <shape>
            <solid android:color="@android:color/transparent" />
            <stroke
                android:width="1dp"
                android:color="#000000" />  <!-- color of stroke -->
        </shape>
    </item>
</layer-list>

1
我已经重新创建了原始底部线的行为。它在边缘处包含填充,并在聚焦时具有相同的行为。
expression_edit_text_bgc_selector.xml (将其设置为android:background)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true"
        android:drawable="@drawable/expression_edit_text_bgc_focused"/>
    <item android:drawable="@drawable/expression_edit_text_bgc_normal"/>
</selector>

expression_edit_text_bgc_focused.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <!--<item android:drawable="@color/main_bg_color"/>-->
    <item>
        <shape>
            <solid android:color="@android:color/transparent"/>
        </shape>
    </item>

    <item
        android:gravity="bottom"
        android:bottom="8dp"
        android:left="4dp"
        android:right="4dp">
        <shape android:shape="rectangle">
            <size android:height="2dp"/>
            <solid android:color="?colorAccent"/>
        </shape>
    </item>
</layer-list>

expression_edit_text_bgc_normal.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <!--<item android:drawable="@color/main_bg_color"/>-->
    <item>
        <shape>
            <solid android:color="@android:color/transparent"/>
        </shape>
    </item>

    <item
        android:gravity="bottom"
        android:bottom="8dp"
        android:left="4dp"
        android:right="4dp">
        <shape android:shape="rectangle">
            <size android:height="1dp"/>
            <solid android:color="?android:colorControlNormal"/>
        </shape>
    </item>
</layer-list>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接