EditText如何使用shape.xml改变边框颜色

39

我在res -> drawable文件夹下创建了一个shape.xml文件。

<?xml version="1.0" encoding="utf-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
        <solid android:color="#ffffff" />
        <stroke android:width="1dip" android:color="#ff9900" />
</selector>

然后我将其用于一个 EditText 上:

<EditText
    android:layout_width="300dp"
    android:layout_height="50dp"
    android:id="@+id/editText"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="300dp"
    android:hint="@string/hint"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:singleLine="true"
    android:background="@drawable/shape"/>

但结果是它根本没有改变边框颜色。为什么,出了什么问题?


下面的回答解决了您的问题吗? - gsanskar
如果其他人也遇到了这个问题,你不能设置“android:backgroundTint”才能使其正常工作。 - Przemysław Wrzesiński
9个回答

92

为什么使用selector作为根标记?selector用于为视图的不同状态应用多个可替换的绘制对象,因此在这种情况下,不需要selector

尝试以下代码。

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

    <!-- Background Color -->
    <solid android:color="#ffffff" />

    <!-- Border Color -->
    <stroke android:width="1dp" android:color="#ff9900" />

    <!-- Round Corners -->
    <corners android:radius="5dp" />

</shape>

值得一提的是,所有颜色输入都支持alpha通道,这意味着您可以拥有透明或半透明的颜色。例如#RRGGBBAA


13

步骤1:在Drawable文件夹中创建一个border.xml文件

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

    <corners
        android:radius="2dp"
        />
    <solid android:color="#ffffff"
        />
    <stroke
        android:width="2dip"
        android:color="#000" />
</shape>

步骤 2:在 XML 文件中创建一个 EditText

 <EditText
        android:id="@+id/etEmail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="25dp"
        android:layout_marginTop="25dp"
        android:hint="Enter Email"
        android:padding="10dp"
        android:layout_marginRight="25dp"
        android:background="@drawable/border"
        android:inputType="textEmailAddress"
        android:singleLine="true" />

2
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
     android:shape="rectangle">
     <solid android:color="#ffffff" />
     <stroke android:width="1dip" android:color="#ff9900" />
 </selector>

您需要从选择器根标记中删除>,如下所示

   <selector xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">

将您的代码从selector移至shape


1
使用此代码在xml上。希望它能正常工作。
<?xml version="1.0" encoding="utf-8" ?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
           android:thickness="0dp"
           android:shape="rectangle">
      <stroke android:width="3dp"
             android:color="#4799E8"/>
      <corners android:radius="5dp" />
      <gradient
       android:startColor="#C8C8C8"
       android:endColor="#FFFFFF"
       android:type="linear"
       android:angle="270"/>
    </shape>

1
我使用以下方法来解决这个问题。

edittext_style.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:thickness="0dp"
android:shape="rectangle">
<stroke android:width="1dp"
        android:color="#c8c8c8"/>
<corners android:radius="0dp" />

以下是应用方式:
<EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textPersonName"
            android:ems="10"
            android:id="@+id/editTextName"
            android:background="@drawable/edit_text_style"/>

尝试这样做...

1

选择器用于为视图的不同状态应用多个备用可绘制对象,因此在这种情况下,不需要使用选择器

相反,使用形状

<?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#ffffff" />
    <stroke android:width="1dip" android:color="#ff9900" />
</shape>

1

请查看下面的代码,可以帮助您, 使用"stroke"可以在编辑文本中添加边框并更改其颜色,如下所示...

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:padding="10dp"
android:shape="rectangle">
<stroke
    android:width="2dp"
    android:color="@color/secondary" />
<corners
    android:bottomLeftRadius="10dp"
    android:bottomRightRadius="10dp"
    android:topLeftRadius="10dp"
    android:topRightRadius="10dp" />

将此添加为编辑文本的背景。 谢谢!

0

在你的shape.xml文件中,使用root tag作为shape而不是selector,这将解决你的问题!


0
这是我的工作: Drawable->New->Drawable资源文件->创建xml文件
  <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
        <solid android:color="#e0e0e0" />
        <stroke android:width="2dp" android:color="#a4b0ba" />
    </shape>

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