EditText subrayado debajo de la propiedad del texto


108

Me gustaría cambiar el color azul debajo del texto de edición, no sé qué propiedad es.

Intenté usar un color de fondo diferente, pero no funcionó.

Adjunto una imagen a continuación:

ingrese la descripción de la imagen aquí


Este es un fondo para EditText que está disponible en cierto nivel de API / teléfono. En otras palabras, si su aplicación se ejecuta en un teléfono diferente, es posible que vea un fondo diferente.
Sherif elKhatib

crea tu fondo de texto de edición personalizado
Vijju

1
Posible duplicación del hilo anterior. Consulte esto en stackoverflow.com/a/4585750/1129468
gokhanakkurt

Use el código a continuación y avíseme si está funcionando o no.
InnocentKiller

Respuestas:


90

En realidad, es bastante fácil establecer el color de subrayado de un EditText mediante programación (solo una línea de código).

Para configurar el color:

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

Para quitar el color:

editText.getBackground().clearColorFilter();

Nota: cuando el EditText tiene el enfoque , el color que establezca no tendrá efecto, en cambio, tiene un color de enfoque.

Referencia API:

Dibujable # setColorFilter

Dibujable # clearColorFilter


4
También funciona en Xamarin para Android, en su renderizador personalizado OnElementChanged puede hacerloControl.Background.SetColorFilter(Android.Graphics.Color.White, PorterDuff.Mode.SrcIn);
David Conlisk

@DavidConlisk, ¿cuál Rendereranula? Estoy tratando de averiguar cómo hacer que esto funcione para una barra de búsqueda.
Nick N.

@NickN. Estaba usando esto para un selector, así que anulé el PickerRenderer. Debería funcionar con el renderizador que más le convenga (¡en teoría!)
David Conlisk

1
Supongo que debería, pero el problema puede ser que SearchBarRendererno sea del tipo EditText. No puedo hacer que funcione.
Nick N.

85

Utilizar android:backgroundTint="" en su EditTextdiseño xml.

Para api <21 puede usar AppCompatEditTextdesde la biblioteca de soporte luegoapp:backgroundTint=""


14
Esto solo funciona actualmente en api 21 y superior. sin soporte al revés.
John Shelley

2
Esta es, con mucho, la solución más simple y concisa.
IgorGanapolsky

@JohnShelley vea mi respuesta a continuación , funciona para pre-Lollipop y posteriores.
Sufian

3
android:background="@null"para dispositivos con api <21.
Hammad Nasir

4
Para que este atributo funcione en las API por debajo de 21, debe usar el espacio de nombres app (xmlns: app = " schemas.android.com/apk/res-auto" ) en lugar de android.
Andrei K.

38

Tienes que usar una imagen de fondo diferente, no un color, para cada estado del EditText(foco, habilitado, activado).

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

En el sitio anterior, puede obtener imágenes de muchos componentes del tema Holo. Simplemente seleccione "EditText" y el color que desee. Puede ver una vista previa en la parte inferior de la página.

Descargue el archivo .zip y copie y pegue los recursos en su proyecto (imágenes y XML).

si su XML se llama: apptheme_edit_text_holo_light.xml (o algo similar):

  1. Vaya a su XML "styles.xml" y agregue el EditTextestilo personalizado :

    <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. Solo haz esto en tu EditText:

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

Y eso es todo, espero que te ayude.


24

Esto funciona bien para versiones antiguas y nuevas de Android (¡funciona bien incluso en API 10!).

Defina este estilo en su 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>

Y ahora en su XML, configure esto como tema y estilo ( estilo para configurar textColory tema para configurar todas las demás cosas):

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

Editar

Esta solución causa una pequeña falla en la interfaz de usuario en las versiones más recientes de Android (Lollipop o Marshmallow en adelante) que los identificadores de selección están subrayados.

Este tema se discute en este hilo . (No he probado esta solución personalmente)


Gran respuesta gracias. El uso de parent = "Widget.AppCompat.EditText", en lugar de parent = "android: Widget.EditText" resolvió mi problema principal.
CFL

1
Creo que quieres decir que esto funciona Lollipop (21) y más porque recibo advertencias de que esto no es inferior a 21
Mark O'Sullivan

@ MarkO'Sullivan no, esto funciona para pre-Lollipop y hasta arriba. Lo probé en API 10 y funciona bien. Pegue el error completo y el lugar donde aparece.
Sufian

El texto de edición enfocado todavía tenía el color primario para mí, así que tuve que usar este enfoque: stackoverflow.com/a/36543554/2413303
EpicPandaForce

18

puede cambiar el subrayado del color de EditText especificándolo en styles.xml . En el tema styles.xml de su aplicación, agregue lo siguiente.

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

Como lo señaló ana en la sección de comentarios

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

establecer esto en el estilo del tema funciona bien para cambiar el color de un subrayado de texto de edición.


3
Tenga en cuenta que también android:textColorSecondaryse utiliza para determinar el color de la flecha hacia atrás y el DrawerLayouticono de hamburguesa en la barra de acciones.
Bianca Daniciuc

7
Terminé usando en <item name="colorControlNormal">@color/edittext_underline_color</item>lugar de textColorSecondary debido al problema de coloración de la barra de navegación.
Bianca Daniciuc

14

Por lo tanto, debe crear un nuevo archivo .xml en su carpeta dibujable.

En ese archivo pega este código:

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

Y en su EditText, configure

android:background="@drawable/your_drawable"

Puede jugar con su xml dibujable, establecer esquinas, rellenos, etc.


1
esta es probablemente la mejor solución dado que permite la personalización completa de EditText, sin afectar otros componentes en un estilo o diseño
mutable2112

por lo que entiendo, puede establecer el fondo del texto de edición en blanco
rmanalo

Revisé todas las soluciones que pude encontrar, esta fue la única que me funcionó usando componentes de Android Material.
barney.balazs

9

En el estilo de su aplicación, defina la propiedad colorAccent . Aquí encuentras un ejemplo

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

5

Puede cambiar el color de EditText mediante programación simplemente usando esta línea de código fácilmente:

edittext.setBackgroundTintList(ColorStateList.valueOf(yourcolor));


1
Funciona de
maravilla

1

Utilice el siguiente código para cambiar el color de fondo del borde del texto de edición.

Cree un nuevo archivo XML en drawable.

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>

y agréguelo como fondo de su texto de edición

android:background="@drawable/abc"

mencioné que había intentado establecer un color de fondo arriba. no funcionó.
AndroidEnthusiast

1

Para cambiar el color de la línea de fondo, puede usar esto en el tema de su aplicación:

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

Para cambiar el color de la etiqueta flotante, escriba el siguiente tema:

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

y usa este tema en tu diseño:

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

ingrese la descripción de la imagen aquí


El texto de edición enfocado todavía tenía color primario para mí, así que tuve que usar este enfoque: stackoverflow.com/a/36543554/2413303
EpicPandaForce

1

Puedes hacerlo con AppCompatEditText y selector de color:

            <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

Si no tiene que admitir dispositivos con API <21, use backgroundHint en xml, por ejemplo:

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

Para un mejor soporte y alternativas, use la solución @Akariuz. backgroundHint es la solución más indolora, pero no compatible con versiones anteriores, según sus requisitos, haga una llamada.


0

cambia el colorAccentcolor que necesitas colorAccenty ejecuta ese color y obtén el resultado


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.