Come cambiare il colore della linea in EditText


203

Sto creando un EditText nel mio file xml di layout

Ma voglio cambiare la linea di colore in EditText da Holo a (per esempio) rosso. Come si può fare?

inserisci qui la descrizione dell'immagine

Risposte:


310

Questo è lo strumento migliore che puoi utilizzare per tutte le viste ed è GRATUITO grazie a @ Jérôme Van Der Linden .

Android Holo Colors Generator ti consente di creare facilmente componenti Android come EditTexto spinner con i tuoi colori per la tua applicazione Android. Genererà tutte le nove risorse di patch necessarie, oltre ai disegni e agli stili XML associati che è possibile copiare direttamente nel progetto.

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

AGGIORNAMENTO 1

Questo dominio sembra scaduto ma il progetto è open source che puoi trovare qui

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

Provalo

questa immagine ha messo sullo sfondo di EditText

android:background="@drawable/textfield_activated"

inserisci qui la descrizione dell'immagine


AGGIORNAMENTO 2

Per API 21 o successive, puoi usare 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" />

Aggiornamento 3 Ora abbiamo con il supporto posterioreAppCompatEditText

Nota: dobbiamo usare l' app: backgroundTint invece di 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" />

Link sembra morto? Il software è ancora disponibile?
Codifica Giovanni il

1
@CodingJohn questo progetto è open source puoi trovare qui github.com/jeromevdl/android-holo-colors
MilapTank

e chi dice che dobbiamo usare "app: backgroundTint invece di android: backgroundTint" ??
user924,

se desideri la compatibilità con le versioni precedenti , puoi utilizzare l'app: *** OW android: ***
MilapTank

203

Non mi piacciono le risposte precedenti. La soluzione migliore è usare:

<android.support.v7.widget.AppCompatEditText

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

android:backgroundTintper EditTextlavori solo su API21 + . Per questo motivo, dobbiamo usare la libreria di supporto eAppCompatEditText .

Nota: dobbiamo usare app:backgroundTintinvece diandroid:backgroundTint

Versione AndroidX

<androidx.appcompat.widget.AppCompatEditText

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

3
Questa è la soluzione migliore! Semplice e funziona a tutti i livelli API. Grazie!
Ivo Stoyanov,

7
non è necessario, se si utilizza la libreria appcompat EdtiTexts viene automaticamente trasformato in AppCompatEditText e viene applicata la tinta di sfondo.
stephane k.

Penso che questa dovrebbe essere esattamente la soluzione
Thuy Nguyen

Grazie mille. Ha funzionato per API 16+. Soluzione migliore.
André Luiz Reis,

2
possibile impostare app: backgroundTint a livello di codice? Potrei trovare un metodo 'setBackgroundTint'
Sarath Nagesh

75

Puoi anche cambiare rapidamente il colore di sottolineatura di EditText colorando lo sfondo di EditText in questo modo:

<EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Something or Other"
            android:backgroundTint="@android:color/holo_green_light" />

18
Funziona solo con API 21 o successiva. Un modo per farlo funzionare per un livello API inferiore?
Vucko,

Controllare REVERSE soluzione stackoverflow.com/questions/26574328/...
powder366

@ mladj0ni Cool, + 1d
Vucko

3
Per i livelli di api minori, utilizzare solo "backgroundTint" invece di "Android: backgroundTint" Crediti stackoverflow.com/a/29400711/1590911
Hasaan Ali

questo cambia l'intero colore di sfondo, non il colore della linea
Code Wiget

29

per API inferiori a 21, è possibile utilizzare l'attributo del tema nel EditText codice sottostante in file di stile

<style name="MyEditTextTheme">
    <item name="colorControlNormal">#FFFFFF</item>
    <item name="colorControlActivated">#FFFFFF</item>
    <item name="colorControlHighlight">#FFFFFF</item>
</style>

usa questo stile EditTextcome

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

sai come aggiungere alfa / opacità al file di stile? Come dovrebbe prendere il colore normale con un'opacità e una volta che iniziano a digitare, dovrebbe prendere il colore attivato o evidenziato
ASN

1
@ANS per questo è necessario aggiungere un ascoltatore di watcher di testo e impostare l'opacità nel metodo "onTextChanged" in modo dinamico
Rahul,

Oh. Quindi non può essere aggiunto al file di stile o di selezione e deve essere eseguito in modo dinamico?
ASN,

L'opacità di @ASN viene aggiunta in esadecimale i primi due caratteri 00-FF, ad esempio: # A1FAFAFA
aimiliano

21

A livello di programmazione, puoi provare:

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

2
Migliore risposta per l'effetto
Xamarin.Forms

11

penso che il modo migliore sia per tema:

<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
questo non funziona per me con il tag di stile ma con Android: tag tema
aimiliano

9

Per cambiare il colore di sottolineatura di Edittext:

Se desideri che l'intera app condivida questo stile, puoi procedere nel modo seguente.

(1) vai al file styles.xml. Il tuo AppTheme che eredita il genitore di Theme.AppCompat.Light.DarkActionBar (nel mio caso) sarà il genitore di base di tutti i file di stile nella tua app. Cambia il nome in "AppBaseTheme". Crea un altro stile proprio sotto di esso che abbia il nome di AppTheme ed erediti da AppBaseTheme che hai appena modificato. Sarà simile al seguente:

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

Quindi cambia "colorAccent" in qualunque sia il colore che vuoi che sia il colore della tua linea EditText.

(2) Se hai altre cartelle di valori con style.xml, questo passaggio è molto importante. Perché quel file erediterà dal tuo precedente file XML padre. Ad esempio, ho valori-19 / styles.xml. Questo è specifico per Kitkat e versioni successive. Cambia il suo genitore in AppBaseTheme e assicurati di sbarazzarti di "colorAccent" in modo che non prevalga sul colore del genitore. Inoltre, è necessario mantenere gli elementi specifici della versione 19. Quindi sarà simile a questo.

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
        <item name="android:windowTranslucentStatus">true</item>
    </style>
</resources>

9

È piuttosto semplice (obbligatorio: API 21 minimo) ...

  1. Vai al tuo XML e seleziona il campo EditText
  2. Sul lato destro, puoi vedere la finestra "Attributi". Seleziona "Visualizza tutti gli attributi"
  3. Cerca 'tint'
  4. E aggiungi / cambia 'backgroundTint' nell'esagono di colore desiderato (ad esempio # FF0000)

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Mantieni codifica ........ :)


2
API minima 21.
Maihan Nijat

La modifica della tonalità di sfondo modifica lo SFONDO. Questa risposta non è corretta
Codice Wiget

6

Il colore della linea è definito dalla EditTextproprietà background di. Per cambiarlo dovresti cambiare android:backgroundnel file di layout.

Dovrei notare che questo stile è ottenuto usando un disegnabile a 9 patch. Se guardi nell'SDK, puoi vedere che lo sfondo di EditTextquesta immagine è:

textfield_activated_holo_light.9.png

Per modificarlo è possibile aprirlo in un programma di manipolazione delle immagini e colorarlo nel colore desiderato. Salvalo come bg_edit_text.9.pnge poi mettilo nella tua cartella disegnabile. Ora puoi applicarlo come sfondo per il tuo EditTextlike così:

android:background="@drawable/bg_edit_text"

5

Puoi cambiare il colore di EditText a livello di codice semplicemente usando questa riga di codice:edittext.setBackgroundTintList(ColorStateList.valueOf(yourcolor));


Questo è quello che sto cercando! Thx
Jiratchaya Intaragumhaeng

4

Lo sfondo dei widget dipende dal livello API .

ALTERNATIVA 1

Puoi fornire un'immagine personalizzata al tuo EditTextsfondo di

android:background="@drawable/custom_editText"

La tua immagine dovrebbe assomigliare a questa. Ti darà l'effetto desiderato.

inserisci qui la descrizione dell'immagine

ALTERNATIVA 2

Imposta questo XML sull'attributo di EditTextsfondo.

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

Questo avrà lo stesso aspetto e il tuo aspetto EditTextsu ogni API.


Sono interessato alla versione 4.0 e successive. Cioè, voglio solo cambiare il colore della linea quando attivo EditText
Alex

4

Puoi cambiare il colore con lo sfondo colorato <EditText android:backgroundTint="@color/red"/>


1
funziona solo per api> 21 dovresti seguire la risposta di @Rahul per tutte le api o aggiungere diversi layout per api> 21 nella cartella layout-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>

Impostare su Modifica testo

<android.support.v7.widget.AppCompatEditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/bg_edittext"/>

3

Usa questo metodo .. e modificalo secondo i tuoi nomi di visualizzazione. Questo codice funziona alla grande.

 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

Se vuoi una linea piatta, puoi farlo facilmente con xml. Ecco l'esempio 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>

Sostituisci la forma con un selettore se desideri fornire larghezza e colore diversi per l'edittext focalizzato.


1
con un design materiale crea un rettangolo, con una linea di fondo più ampia
Filip Zymek,

2

L'approccio migliore consiste nell'utilizzare un attributo AppCompatEditTextwith backgroundTintdello appspazio dei nomi. vale a dire

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

quando lo utilizziamo android:backgroundTintfunzionerà solo in API21 o più, ma app:backgroundTintfunziona a tutti i livelli API della tua app.


1

Usa android: proprietà di sfondo per quel edittext. Passa l'immagine della cartella disegnabile ad essa. Per esempio,

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

** si tratta di fare con vista **


1

Prova nel modo seguente, convertirà il colore della riga inferiore di EditText, se utilizzato come proprietà di sfondo.

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

Questo può essere fatto semplicemente includendolo android:theme="@style/AppTheme.AppBarOverlaycome attributo in per il tuo editText e aggiungendolo <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />ai tuoi stili

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.