如何在EditText中更改线条颜色


203

我正在布局XML文件中创建一个EditText

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

在此处输入图片说明

Answers:


310

这是您可以用于所有视图的最佳工具,而@ JérômeVan Der Linden可以免费使用。

Android Holo Colors Generator允许您EditText使用自己的颜色为Android应用程序轻松创建Android组件,例如或Spinner。它将生成所有必要的九个补丁资产以及相关的XML可绘制对象和样式,您可以将其直接复制到项目中。

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

更新1

该域似乎已过期,但是该项目是一个开放源代码,您可以在这里找到

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

试试吧

此图像放在背景中 EditText

android:background="@drawable/textfield_activated"

在此处输入图片说明


更新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" />

Update 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
@CodingJohn这个项目是开源的,您可以在这里找到github.com/jeromevdl/android-holo-colors
MilapTank

谁说我们必须使用“ app:backgroundTint而不是android:backgroundTint”?
user924

如果您想向后兼容,则可以使用app:*** OW android:***
MilapTank

202

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

<android.support.v7.widget.AppCompatEditText

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

android:backgroundTint对于EditText只在作品API21 +。因此,我们必须使用支持库和AppCompatEditText

注意:我们必须使用app:backgroundTint代替android:backgroundTint

AndroidX版本

<androidx.appcompat.widget.AppCompatEditText

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

3
这是最好的解决方案!简单,适用于所有API级别。谢谢!
伊沃·斯托亚诺夫

7
您不需要这样做,如果您使用appcompat库,则EdtiTexts会自动转换为AppCompatEditText并应用背景色。
斯蒂芬·k。

我认为这应该是正确的解决方案
Thuy Nguyen

非常感谢你。它适用于API 16+。最佳解决方案。
安德烈·路易斯·里斯

2
可以通过编程设置app:backgroundTint吗?我可以找到方法“ setBackgroundTint”
Sarath Nagesh

75

您还可以通过像这样设置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" />

18
仅适用于API 21或更高版本。有什么方法可以使此功能适用于较低的API级别?
Vucko


@ mladj0ni酷,+ 1D
Vucko

3
对于较小的API级别,只使用,而不是“backgroundTint”“机器人:backgroundTint”积分stackoverflow.com/a/29400711/1590911
Hasaan阿里

这会更改整个背景颜色,而不是线条颜色
Code Wiget

29

对于21 以下的API,您可以在EditText 下面的代码中使用主题属性放入样式文件中

<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" />

您知道如何在样式文件中添加Alpha /不透明度吗?就像它应该采用不透明的普通颜色,一旦他们开始键入一样,它应该采用激活的或突出显示的颜色
ASN

1
@ANS,您需要添加文本观察器侦听器并在“ onTextChanged”方法中动态设置不透明度
Rahul

哦。因此,它不能添加到样式或选择器文件中,应该动态地进行吗?
ASN

@ASN不透明度在前两个字符00-FF中以十六进制颜色添加,因此例如:#A1FAFAFA
aimiliano

21

您可以通过编程方式尝试:

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

2
Xamarin.Forms效果的最佳答案
mister_giga

11

我认为最好的方法是按主题:

<style name="MyEditTextTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorControlNormal">@color/black</item>
        <item name="colorControlActivated">@color/action_blue</item>
        <item name="colorControlHighlight">@color/action_blue</item>
</style>

<style name="AddressBookStyle" parent="Theme.AppCompat.Light.DarkActionBar">
     <item name="android:layout_width">match_parent</item>
     <item name="android:layout_height">wrap_content</item>
     <item name="android:textSize">13sp</item>
     <item name="android:theme">@style/MyEditTextTheme</item>
</style>

<android.support.v7.widget.AppCompatEditText
            style="@style/AddressBookStyle"/>

2
不适

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的value文件夹,则此步骤非常重要。因为该文件将继承您先前的父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>

9

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

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

在此处输入图片说明

在此处输入图片说明

保持编码........ :)


2
最低API 21.
Maihan Nijat

更改背景色会更改背景。这个答案是不正确的
Code Wiget

6

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

我应该注意,这种样式是通过使用9色可绘制对象实现的。如果您在SDK中查看,则可以看到的背景EditText是此图片:

textfield_activated_holo_light.9.png

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

android:background="@drawable/bg_edit_text"


4

小部件的背景取决于API级别

替代方案1

您可以通过以下方式为EditText背景提供自定义图片:

android:background="@drawable/custom_editText"

您的图像应如下所示。它会给您想要的效果。

在此处输入图片说明

替代方案2

将此xml设置为您的EditTextbackground属性。

<?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>

EditText每个API 都会具有与您相同的外观。


我对4.0及以上版本感兴趣。也就是说,我只想在激活EditText时更改线条颜色
Alex

4

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


1
这仅适用于api> 21,您应遵循@Rahul对所有api的回答,或在layout-21文件夹中为api> 21添加不同的布局
aimiliano

4

drawable / bg_edittext.xml

<?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" />
        </shape>
    </item>

    <item
        android:left="-2dp"
        android:right="-2dp"
        android:top="-2dp">
        <shape>
            <solid android:color="@android:color/transparent" />
            <stroke
                android:width="1dp"
                android:color="@color/colorDivider" />
        </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"/>

3

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

 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());
            }

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>

如果要为焦点编辑文本提供不同的宽度和颜色,请用选择器替换形状。


1
通过材料设计,它可以创建矩形,并具有更宽的底线
Filip Zymek'1

2

最好的方法是使用命名空间的AppCompatEditTextwith backgroundTint属性app。即

    <android.support.v7.widget.AppCompatEditText
    android:layout_width="match_parent"      
    app:backgroundTint="YOUR COLOR"
    android:layout_height="wrap_content" />

当我们使用android:backgroundTint它时,它将只能在API21或更高版本中使用,但app:backgroundTint可以在您的应用程序支持的所有API级别上使用。


1

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

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

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" />

**这是与视图一起做**


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>

0

只需将其android:theme="@style/AppTheme.AppBarOverlay作为属性添加<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />到您的editText中,并将其添加到样式中即可

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.