文字属性下方的EditText下划线


108

我想更改编辑文本下方的蓝色,我不知道它是什么属性。

我尝试使用其他背景色,但没有用。

我在下面附上了一张图片:

在此处输入图片说明


这是EditText的背景,可在某些api级别/电话上使用。换句话说,如果您的应用在其他手机上运行,​​您可能会看到不同的背景。
Sherif elKhatib 2014年

创建您自定义edittext背景
Vijju 2014年

1
可能与先前的线程重复。请检查此stackoverflow.com/a/4585750/1129468
gokhanakkurt 2014年

使用下面的代码,让我知道它是否有效。
InnocentKiller 2014年

Answers:


90

以编程方式(仅一行代码)设置EditText的下划线颜色实际上相当容易。

设置颜色:

editText.getBackground().setColorFilter(color, PorterDuff.Mode.SRC_IN);

去除颜色:

editText.getBackground().clearColorFilter();

注意:当EditText处于焦点上时,您设置的颜色不会生效,而是具有焦点颜色。

API参考:

Drawable#setColorFilter

Drawable#clearColorFilter


4
在Android Xamarin上也可以使用,您可以在自定义渲染器OnElementChanged中进行操作Control.Background.SetColorFilter(Android.Graphics.Color.White, PorterDuff.Mode.SrcIn);
David Conlisk,2016年

@DavidConlisk Renderer您覆盖哪个?我试图弄清楚如何使它适合搜索栏。
尼克N.

@NickN。我将其用于选择器,所以我覆盖了PickerRenderer。它应该与最适合您的渲染器一起工作(理论上!)
David Conlisk

1
我猜应该可以,但是问题可能SearchBarRenderer是的类型不是EditText。无法正常工作。
尼克N.

85

使用android:backgroundTint=""你的EditTextXML布局。

对于api <21,您可以AppCompatEditText从支持库中使用app:backgroundTint=""


14
目前仅在api 21及更高版本中有效。没有向后支持。
John Shelley 2015年

2
到目前为止,这是最简单,最简洁的解决方案。
IgorGanapolsky

@JohnShelley 在下面看到我的答案,它适用于棒棒糖之前的版本。
苏菲安

3
android:background="@null"适用于api <21的设备
哈马德·纳西尔

4
要使此属性在21以下的API中起作用,您应该使用app(xmlns:app =“ schemas.android.com/apk/res-auto”)命名空间而不是android。
Andrei K.

38

您必须为EditText(焦点,启用,激活)的每种状态使用不同的背景图像,而不是彩色图像。

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

在上面的站点中,您可以从Holo主题的许多组件中获取图像。只需选择“ EditText”和所需的颜色即可。您可以在页面底部看到预览。

下载.zip文件,然后将资源复制粘贴到您的项目中(图像和XML)。

如果您的XML命名为:apptheme_edit_text_holo_light.xml(或类似名称):

  1. 转到您的XML“ styles.xml”并添加自定义EditText样式:

    <style name="EditTextCustomHolo" parent="android:Widget.EditText">
       <item name="android:background">@drawable/apptheme_edit_text_holo_light</item>
       <item name="android:textColor">#ffffff</item>
    </style>
    
  2. 只需在您的EditText

    <EditText
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       style="@style/EditTextCustomHolo"/>
    

就是这样,希望对您有所帮助。


24

这适用于新旧版本的Android(即使在API 10上也可以正常使用!)。

在您的中定义此样式styles.xml

<style name="EditText.Login" parent="Widget.AppCompat.EditText">
    <item name="android:textColor">@android:color/white</item>
    <item name="android:textColorHint">@android:color/darker_gray</item>
    <item name="colorAccent">@color/blue</item>
    <item name="colorControlNormal">@color/blue</item>
    <item name="colorControlActivated">@color/blue</item>
</style>

现在,在您的XML中,将其设置为主题和样式(将style设置为set textColor,将theme设置为所有其他内容):

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="text"
    style="@style/EditText.Login"
    android:theme="@style/EditText.Login"/>

编辑

此解决方案在带下划线的较新的Android版本(从Lollipop或Marshmallow开始)上引起微小的UI故障。

线程中讨论了此问题。(我还没有亲自尝试过此解决方案)


很好的回答,谢谢。使用parent =“ Widget.AppCompat.EditText”代替parent =“ android:Widget.EditText”解决了我的主要问题。
cfl

1
我认为您是说这对Lollipop(21)以上有效,因为我收到警告说它不低于21
Mark O'Sullivan

@ MarkO'Sullivan不,这适用于棒棒糖之前的所有产品。我已经在API 10上对其进行了测试,并且效果很好。请粘贴完整的错误及其显示的位置。
Sufian

重点突出的编辑文本仍然对我来说是原色,所以我不得不使用这种方法:stackoverflow.com/a/36543554/2413303
EpicPandaForce

18

您可以更改styles.xml中指定的EditText 下划线的颜色。在您的应用程序主题styles.xml中添加以下内容。

<item name="android:textColorSecondary">@color/primary_text_color</item> 

正如安娜在评论部分指出的

  <item name="android:colorControlActivated">@color/black</item>

将此主题设置为主题样式非常适合更改edittext下划线的颜色。


3
请注意,它android:textColorSecondary也用于确定DrawerLayoutActionBar中后退箭头和汉堡包图标的颜色。
比安卡·丹尼库克

7
<item name="colorControlNormal">@color/edittext_underline_color</item>由于导航栏的颜色问题,我最终使用而不是textColorSecondary。
比安卡·丹尼库克

14

因此,您需要在可绘制文件夹中创建一个新的.xml文件。

在该文件中粘贴以下代码:

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

然后在您的EditText中,设置

android:background="@drawable/your_drawable"

您可以使用可绘制的xml,设置边角,填充等。


1
考虑到它可以完全自定义EditText,而不影响样式或布局中的其他组件,因此这可能是更好的解决方案
mutable2112 '16

从我无法理解的角度来看,您可以将edittext的背景设置为白色
rmanalo

经历了我能找到的所有解决方案,这是我使用Android Material组件的唯一解决方案。
barney.balazs

9

在您的应用样式中,定义属性colorAccent。在这里找到一个例子

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/action_bar</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/action_bar</item>
</style>


1

使用下面的代码更改编辑文本边框的背景颜色。

在drawable下创建新的XML文件。

abc.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#00000000" />
    <stroke android:width="1dip" android:color="#ffffff" />
</shape>

并将其添加为您的编辑文本的背景

android:background="@drawable/abc"

我提到我曾尝试在上面设置背景色。它没有用。
AndroidEnthusiast 2014年

1

要更改底线颜色,可以在应用程序主题中使用此颜色:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

    <item name="colorControlNormal">#c5c5c5</item>
    <item name="colorControlActivated">#ffe100</item>
    <item name="colorControlHighlight">#ffe100</item>
</style>

要更改浮动标签的颜色,请写以下主题:

<style name="TextAppearence.App.TextInputLayout" parent="@android:style/TextAppearance">
<item name="android:textColor">#4ffd04[![enter image description here][1]][1]</item>
</style>

并在您的布局中使用此主题:

 <android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="20dp"
    app:hintTextAppearance="@style/TextAppearence.App.TextInputLayout">

    <EditText
        android:id="@+id/edtTxtFirstName_CompleteProfileOneActivity"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:capitalize="characters"
        android:hint="User Name"
        android:imeOptions="actionNext"
        android:inputType="text"
        android:singleLine="true"
        android:textColor="@android:color/white" />

</android.support.design.widget.TextInputLayout>

在此处输入图片说明


重点突出的编辑文本仍然对我来说是原色,所以我不得不使用这种方法:stackoverflow.com/a/36543554/2413303
EpicPandaForce

1

您可以使用AppCompatEditText和颜色选择器来做到这一点:

            <androidx.appcompat.widget.AppCompatEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:backgroundTint="@color/selector_edittext_underline" />

selector_edittext_underline.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/focused_color" 
          android:state_focused="true" />
    <item android:color="@color/hint_color" />
</selector>

0

如果您不必支持API <21的设备,请在xml中使用backgroundHint,例如:

 <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textPersonName"
            android:hint="Task Name"
            android:ems="10"
            android:id="@+id/task_name"
            android:layout_marginBottom="15dp"
            android:textAlignment="center"
            android:textColor="@android:color/white"

            android:textColorLink="@color/blue"
            android:textColorHint="@color/blue"
            android:backgroundTint="@color/lighter_blue" />

为了获得更好的支持和后备,请使用@Akariuz解决方案。backgroundHint是最轻松的解决方案,但不向后兼容,可根据您的要求进行调用。


0

更改您colorAccent需要设置该颜色的颜色colorAccent并运行即可获取输出


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.