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í

AndroidEntusiasta
fuente
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
android-holo-colors.com
Pratik Butani

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

Jing Li
fuente
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=""

Soheil Setayeshi
fuente
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.

Akariuz
fuente
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)

Sufian
fuente
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.

Dharani Kumar
fuente
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.

Vulovic Vukasin
fuente
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>
Roberto
fuente
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));

Matin Ashtiani
fuente
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"
Asesino inocente
fuente
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í

SAndroidD
fuente
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>
Gogi Bobina
fuente
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.

MoMo
fuente
0

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

MD Khali
fuente
0

Simplemente cambie android: backgroundTint en código xml a su color

Marcus Runge
fuente