EditText sottolinea sotto la proprietà del testo


108

Vorrei cambiare il colore blu sotto il testo di modifica, non so quale proprietà sia.

Ho provato a usare un colore di sfondo diverso ma non ha funzionato.

Ho allegato un'immagine qui sotto:

inserisci qui la descrizione dell'immagine


Questo è uno sfondo per EditText che è disponibile su un determinato livello di API / telefono. In altre parole, se la tua app viene eseguita su un telefono diverso potresti vedere uno sfondo diverso.
Sherif elKhatib

crea il tuo sfondo editesto personalizzato
Vijju

1
Possibile duplicazione del thread precedente. Si prega di controllare questo fuori stackoverflow.com/a/4585750/1129468
gokhanakkurt

Usa la parte di codice sottostante e fammi sapere se funziona o meno.
InnocentKiller

Risposte:


90

In realtà è abbastanza facile impostare il colore di sottolineatura di un EditText a livello di codice (solo una riga di codice).

Per impostare il colore:

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

Per rimuovere il colore:

editText.getBackground().clearColorFilter();

Nota: quando l'EditText ha il focus sul, il colore impostato non avrà effetto, invece, ha un colore fuoco.

Riferimento API:

Drawable # setColorFilter

Drawable # clearColorFilter


4
Funziona anche su Xamarin per Android, nel tuo renderer personalizzato OnElementChanged puoi farloControl.Background.SetColorFilter(Android.Graphics.Color.White, PorterDuff.Mode.SrcIn);
David Conlisk

@DavidConlisk quale Renderersostituisci? Sto cercando di capire come farlo funzionare per una barra di ricerca.
Nick N.

@NickN. Lo stavo usando per un selettore, quindi ho sovrascritto PickerRenderer. Dovrebbe funzionare con qualsiasi renderer più adatto a te (in teoria!)
David Conlisk

1
Immagino che dovrebbe, ma il problema è che potrebbe non essere SearchBarRendererdi tipo EditText. Non riesco a farlo funzionare.
Nick N.

85

Usa android:backgroundTint=""nel tuo EditTextlayout xml.

Per api <21 puoi quindi utilizzare AppCompatEditTextdalla libreria di supportoapp:backgroundTint=""


14
Attualmente funziona solo in api 21 e versioni successive. nessun supporto all'indietro.
John Shelley

2
Questa è di gran lunga la soluzione più semplice e concisa.
IgorGanapolsky

@JohnShelley vedi la mia risposta qui sotto , funziona per pre-Lollipop e versioni successive.
Sufian

3
android:background="@null"per dispositivi con api <21.
Hammad Nasir

4
Per far funzionare questo attributo nelle API inferiori a 21 dovresti usare app (xmlns: app = " schemas.android.com/apk/res-auto" ) invece di android.
Andrei K.

38

Devi usare un'immagine di sfondo diversa, non un colore, per ogni stato di EditText (focus, abilitato, attivato).

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

Nel sito sopra, puoi ottenere immagini da molti componenti del tema Holo. Basta selezionare "Modifica testo" e il colore desiderato. Puoi vedere un'anteprima in fondo alla pagina.

Scarica il file .zip e copia e incolla le risorse nel tuo progetto (immagini e XML).

se il tuo XML si chiama: apptheme_edit_text_holo_light.xml (o qualcosa di simile):

  1. Vai al tuo XML "styles.xml" e aggiungi lo EditTextstile personalizzato :

    <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. Basta farlo nel tuo EditText:

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

E questo è tutto, spero che ti aiuti.


24

Funziona bene per la vecchia e la nuova versione di Android (funziona bene anche su API 10!).

Definisci questo stile nel tuo 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>

E ora nel tuo XML, imposta questo come tema e stile ( stile da impostare textColore tema per impostare tutte le altre cose):

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

modificare

Questa soluzione causa un piccolo inconveniente dell'interfaccia utente sulle versioni Android più recenti (Lollipop o Marshmallow in poi) in cui le maniglie di selezione sono sottolineate.

Questo problema è discusso in questo thread . (Non ho provato personalmente questa soluzione)


Ottima risposta grazie. L'uso di parent = "Widget.AppCompat.EditText", invece di parent = "android: Widget.EditText" ha risolto il mio problema principale.
cfl

1
Penso che intendi dire che funziona Lollipop (21) e oltre perché ricevo avvertimenti che non è inferiore a 21
Mark O'Sullivan

@ MarkO'Sullivan no, funziona per pre-Lollipop e fino in fondo. L'ho testato su API 10 e funziona bene. Si prega di incollare l'errore completo e il luogo in cui viene visualizzato.
Sufian

Focused modificare il testo aveva ancora colore primario colore per me, così ho dovuto usare questo approccio: stackoverflow.com/a/36543554/2413303
EpicPandaForce

18

puoi cambiare il colore della sottolineatura di EditText specificandolo in styles.xml . Nel tuo tema dell'app styles.xml aggiungi quanto segue.

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

Come sottolineato da ana nella sezione commenti

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

impostarlo nello stile del tema funziona bene per cambiare il colore di una sottolineatura edittext.


3
Nota che android:textColorSecondaryviene utilizzato anche per determinare il colore della freccia indietro e DrawerLayoutdell'icona dell'hamburger nella ActionBar.
Bianca Daniciuc

7
Ho finito per usare al <item name="colorControlNormal">@color/edittext_underline_color</item>posto di textColorSecondary a causa del problema di colorazione della barra di navigazione.
Bianca Daniciuc

14

Quindi, è necessario creare un nuovo file .xml nella cartella disegnabile.

In quel file incolla questo codice:

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

E nel tuo EditText, imposta

android:background="@drawable/your_drawable"

Puoi giocare con il tuo xml disegnabile, impostare angoli, imbottiture, ecc.


1
questa è probabilmente la soluzione migliore dato che consente la completa personalizzazione dell'EditText, senza influire su altri componenti in uno stile o layout
mutable2112

da quello che ho capito, puoi semplicemente impostare lo sfondo di edittext su bianco
rmanalo

Ho esaminato tutte le soluzioni che sono riuscito a trovare, questa è stata l'unica che funziona per me utilizzando componenti di materiale Android.
barney.balazs

9

Nello stile della tua app definisci la proprietà colorAccent . Qui trovi un esempio

<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

Puoi cambiare il colore di EditText a livello di codice usando facilmente questa riga di codice:

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


1
Funziona a
meraviglia

1

Usa il codice sottostante per cambiare il colore di sfondo del bordo del testo di modifica.

Crea un nuovo file XML sotto 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>

e aggiungilo come sfondo del tuo testo di modifica

android:background="@drawable/abc"

ho detto che avevo provato a impostare un colore di sfondo sopra. non ha funzionato.
AndroidEnthusiast

1

Per cambiare il colore della linea di fondo, puoi usarlo nel tema della tua app:

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

Per cambiare il colore dell'etichetta mobile scrivi il seguente tema:

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

e usa questo tema nel tuo layout:

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

inserisci qui la descrizione dell'immagine


Focused modificare il testo aveva ancora colore primario colore per me, così ho dovuto usare questo approccio: stackoverflow.com/a/36543554/2413303
EpicPandaForce

1

Puoi farlo con AppCompatEditText e il selettore di colori:

            <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

Se non devi supportare dispositivi con API <21, usa backgroundHint in xml, ad esempio:

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

Per un migliore supporto e fallback utilizzare la soluzione @Akariuz. backgroundHint è la soluzione più indolore, ma non compatibile con le versioni precedenti, in base alle tue esigenze effettua una chiamata.


0

cambia il colorAccentcolore su cui hai bisogno di quel colore impostato colorAccented esegui per ottenere l'output


0

Cambia semplicemente android: backgroundTint nel codice xml con il tuo colore

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.