如何在EditText中更改线条颜色

时间:2014-07-10 13:08:59

标签: android xml layout styles

我在布局xml文件中创建了一个EditText

但我想将EditText中的颜色线从Holo更改为(例如)红色。 怎么做?

enter image description here

22 个答案:

答案 0 :(得分:228)

这是您可以用于所有视图的最佳工具,非常感谢@ Jérôme Van Der Linden

Android Holo颜色生成器允许您轻松地为您的Android应用程序创建具有自己颜色的EditText或微调器等Android组件。它将生成所有必需的九个补丁资源以及相关的XML drawable和样式,您可以将它们直接复制到项目中。

  

http://android-holo-colors.com/

更新1

此域名似乎已过期但该项目是您可以在此处找到的开源

  

https://github.com/jeromevdl/android-holo-colors

试试吧

此图片放在EditText

的背景中
android:background="@drawable/textfield_activated"

enter image description here


更新2

对于API 21或更高版本,您可以使用android:backgroundTint

<EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Underline color change"
        android:backgroundTint="@android:color/holo_red_light" />

更新3 现在我们有支持AppCompatEditText

注意:我们需要使用 app:backgroundTint 而不是 android:backgroundTint

<android.support.v7.widget.AppCompatEditText
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:hint="Underline color change"
    app:backgroundTint="@color/blue_gray_light" />

答案 1 :(得分:164)

我不喜欢以前的答案。最好的解决方案是使用:

<android.support.v7.widget.AppCompatEditText

      app:backgroundTint="@color/blue_gray_light" />
EditText

android:backgroundTint 仅适用于 API21 + 。因此,我们必须使用支持库和 AppCompatEditText

注意:我们必须使用 app:backgroundTint 而不是android:backgroundTint

答案 2 :(得分:66)

您还可以通过对EditText的背景进行着色来快速更改EditText的下划线颜色,如下所示:

<EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Something or Other"
            android:backgroundTint="@android:color/holo_green_light" />

答案 3 :(得分:16)

以编程方式,您可以尝试:

editText.getBackground().mutate().setColorFilter(getResources().getColor(android.R.color.holo_red_light), PorterDuff.Mode.SRC_ATOP);

答案 4 :(得分:12)

对于21以下的api,您可以在edittext中使用theme属性 将下面的代码放入样式文件

<style name="MyEditTextTheme">
        <item name="colorControlNormal">#FFFFFF</item>
        <item name="colorControlActivated">#FFFFFF</item>
        <item name="colorControlHighlight">#FFFFFF</item>
    </style>

在edittext中将此样式用作

<EditText       android:id="@+id/etPassword"
                android:layout_width="match_parent"
                android:layout_height="@dimen/user_input_field_height"
                android:layout_marginTop="40dp"
                android:hint="@string/password_hint"
                android:theme="@style/MyEditTextTheme"
                android:singleLine="true" />

答案 5 :(得分:10)

我认为最好的方式是主题:

{{1}}

答案 6 :(得分:9)

更改Edittext的下划线颜色:

如果您希望整个应用分享此风格,则可以采用以下方式。

(1)转到styles.xml文件。继承Theme.AppCompat.Light.DarkActionBar(在我的例子中)的父级的AppTheme将是应用程序中所有样式文件的基本父级。将其名称更改为“AppBaseTheme”。在其下创建另一个名为AppTheme的样式,并继承自刚编辑的AppBaseTheme。它将如下所示:

<!-- Base application theme. -->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="windowActionBar">false</item>
    <!--see http://www.google.com/design/spec/style/color.html#color-color-palette-->
    <item name="colorPrimary">@color/material_brown_500</item>
    <item name="colorPrimaryDark">@color/material_brown_700</item>
    <item name="colorAccent">@color/flamingo</item>

<style name="AppTheme" parent="AppBaseTheme">
    <!-- Customize your theme here. -->
</style>

然后将“colorAccent”更改为您希望EditText线颜色的颜色。

(2)如果你有style.xml的其他值文件夹,这一步非常重要。因为该文件将继承您以前的父xml文件。例如,我有值-19 / styles.xml。这是专门针对Kitkat及以上的。将其父级更改为AppBaseTheme并确保删除“colorAccent”,以便它不会覆盖父级的颜色。此外,您需要保留特定于版本19的项目。然后它将如下所示。

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
        <item name="android:windowTranslucentStatus">true</item>
    </style>
</resources>

答案 7 :(得分:8)

非常简单(必需:最低API 21)...

  1. 转到您的xml并选择EditText字段
  2. 在右侧,您可以看到“属性”窗口。选择“查看所有属性”
  3. 只需搜索“色调”
  4. 然后将'backgroundTint'添加/更改为所需的颜色十六进制(例如#FF0000)

enter image description here

enter image description here

继续编码........:)

答案 8 :(得分:6)

线条的颜色由EditText的背景属性定义。要更改它,您应该更改布局文件中的android:background

我应该注意到这种风格是通过使用9-patch drawable来实现的。如果你查看SDK,你可以看到EditText的背景是这个图像:

textfield_activated_holo_light.9.png

要更改它,您可以在图像处理程序中打开它并以所需颜色着色。将其保存为bg_edit_text.9.png,然后将其放入可绘制文件夹中。现在,您可以将其作为EditText的背景应用于:

android:background="@drawable/bg_edit_text"

答案 9 :(得分:4)

小部件的背景是依赖于API级别

替代方案1

您可以通过

EditText背景提供自定义图片
android:background="@drawable/custom_editText"

您的图片应该是这样的。它会给你带来理想的效果。

enter image description here

ALTERNATIVE 2

将此xml设置为EditText背景属性。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
 android:shape="rectangle" android:padding="10dp">
<solid android:color="#4C000000"/>
    <corners android:bottomRightRadius="5dp"
             android:bottomLeftRadius="5dp"
             android:topLeftRadius="5dp"
             android:topRightRadius="5dp"/>
</shape>

这与每个API上的EditText具有相同的外观。

答案 10 :(得分:4)

您可以通过着色背景来更改颜色      <EditText android:backgroundTint="@color/red"/>

答案 11 :(得分:3)

您可以使用以下代码行以编程方式更改EditText的颜色:edittext.setBackgroundTintList(ColorStateList.valueOf(yourcolor));

答案 12 :(得分:2)

如果你想要一条扁平线,你可以使用xml轻松完成。这是xml示例:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:top="-1dp"
        android:left="-1dp"
        android:right="-1dp"
        android:bottom="1dp"
        >
        <shape android:shape="rectangle">
            <stroke android:width="1dp" android:color="#6A9A3A"/>
        </shape>
    </item>
</layer-list>

如果要为聚焦的edittext提供不同的宽度和颜色,请使用选择器替换形状。

答案 13 :(得分:2)

使用此方法..并根据您的视图名称进行修改。这段代码效果很好。

 private boolean validateMobilenumber() {
            if (mobilenumber.getText().toString().trim().isEmpty() || mobilenumber.getText().toString().length() < 10) {
                input_layout_mobilenumber.setErrorEnabled(true);
                input_layout_mobilenumber.setError(getString(R.string.err_msg_mobilenumber));
               // requestFocus(mobilenumber);
                return false;
            } else {
                input_layout_mobilenumber.setError(null);
                input_layout_mobilenumber.setErrorEnabled(false);
                mobilenumber.setBackground(mobilenumber.getBackground().getConstantState().newDrawable());
            }

答案 14 :(得分:2)

最好的方法是使用AppCompatEditText backgroundTint app命名空间的 <android.support.v7.widget.AppCompatEditText android:layout_width="match_parent" app:backgroundTint="YOUR COLOR" android:layout_height="wrap_content" /> 属性。即。

android:backgroundTint

当我们使用app:backgroundTint时,它只能在API21或更高版本中使用,但SELECT u1.username user1, u2.username user2 FROM rel JOIN users u1 ON rel.user1 = u1.user_id JOIN users u2 ON rel.user2 = u2.user_id 适用于您应用的所有API级别。

答案 15 :(得分:1)

尝试以下方式,当用作背景属性时,它将转换EditText的底线颜色。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:left="@dimen/spacing_neg"
        android:right="@dimen/spacing_neg"
        android:top="@dimen/spacing_neg">
        <shape>
            <solid android:color="@android:color/transparent" />
            <stroke
                android:width="@dimen/spacing_1"
                android:color="@android:color/black" />
        </shape>
    </item>
</layer-list>

答案 16 :(得分:1)

 <EditText
        android:id="@+id/et_password_tlay"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Password"
        android:textColorHint="#9e9e9e"
        android:backgroundTint="#000"
        android:singleLine="true"
        android:drawableTint="#FF4081"
        android:paddingTop="25dp"
        android:textColor="#000"
        android:paddingBottom="5dp"
        android:inputType="textPassword"/>

    <View
        android:id="@+id/UnderLine"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_below="@+id/et_password_tlay"
        android:layout_centerHorizontal="true"
        android:background="#03f94e" />

**用视图**

答案 17 :(得分:1)

对该edittext使用android:background属性。将可绘制的文件夹图像传递给它。 例如,

android:background="@drawable/abc.png"

答案 18 :(得分:0)

这可以通过在editText中包含此android:theme="@style/AppTheme.AppBarOverlay属性来完成 并将此<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />添加到您的样式

答案 19 :(得分:0)

drawable / bg_edittext.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:gravity="bottom">
        <shape>
            <size android:height="1dp" />
            <solid android:color="@android:color/black" />
        </shape>
    </item>
</layer-list>

设置为EditText

<android.support.v7.widget.AppCompatEditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/bg_edittext"/>

答案 20 :(得分:0)

重要的是,您的应用程序主题必须继承自Theme.AppCompat.*,而不是Theme.AppCompat.*

答案 21 :(得分:0)

如果您有用于 edittext 的自定义类,则可以动态执行此操作。

首先,您必须声明下面给出的编辑文本的状态和颜色。

int[][] states = new int[][]{
                new int[]{-android.R.attr.state_focused}, // enabled
                new int[]{android.R.attr.state_focused}, // disabled
        };
        int[] colors = new int[]{
                secondaryColor,
                primaryColor,
        };

然后用它创建 ColorStateList 变量

ColorStateList myList = new ColorStateList(states, colors);

然后最后一步是将其分配给edittext。

editText.setBackgroundTintList(myList);

在此之后,您必须编写焦点更改事件。

this.setOnFocusChangeListener(new OnFocusChangeListener() {
                    @Override
                    public void onFocusChange(View view, boolean b) {
                        setUnderlineColor(selectionColor,deselectionColor);
                    }
                });

您可以在 setUnderlineClor() 方法中制作上述代码,

private void setUnderlineColor(int primaryColor, int secondaryColor) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        int[][] states = new int[][]{
                new int[]{-android.R.attr.state_focused}, // enabled
                new int[]{android.R.attr.state_focused}, // disabled
        };
        int[] colors = new int[]{
                secondaryColor,
                primaryColor,
        };
        ColorStateList myList = new ColorStateList(states, colors);
        setBackgroundTintList(myList);
    }
}