Cambia il colore del suggerimento EditText quando si utilizza TextInputLayout


146

Sto usando il nuovo TextInputLayoutdalla libreria di design. Sono in grado di farlo mostrare e cambiare il colore dell'etichetta mobile. Purtroppo il EditTextsuggerimento reale ora è sempre bianco.

Ho provato a cambiare hintColor in XML, stili e programmaticamente e ho anche provato a usare il android.support.v7.widget.AppCompatEditText ma il EditTextsuggerimento mostra sempre il bianco.

Ecco il mio XML per il mio TextInputLayouteEditText

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android.support.design:hintTextAppearance="@style/GreenTextInputLayout">


    <EditText

    android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/city"
        android:textColorHint="@color/black"
        android:hint="@string/city" />

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

Ed ecco lo stile che sto usando per il TextInputLayout(ho provato a rendere l' hintTextColorattributo nero ma non ho fatto nulla per me):

<style name="GreenTextInputLayout" parent="@style/TextAppearance.AppCompat">
    <item name="android:textColor">@color/homestory_green</item>
</style>

Sto affrontando lo stesso errore. Il suggerimento è sempre il colore "BIANCO" inizialmente dopo aver toccato qualsiasi modifica Testo, prende il colore da te definito. Sto ancora cercando la correzione.
ch3tanz,

Hai provato la risposta di @Ali Kabiri. Sembra che sia una soluzione migliore della mia. Il mio era molto specifico per il mio progetto.
SamIAmHarris,

Ho il mio tema personalizzato e tutti i colori sono definiti in style.xml
ch3tanz

Risposte:


164

Definisci android:textColorHintil tema dell'applicazione:

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/accent</item>

    <item name="android:textColorHint">@color/secondary_text</item>
</style>

fonte


@TheHungryAndroider hai impostato il tema come tema di acitvity in cui usi il testo di modifica?
mbelsky,

1
Funziona per me, ma il colore del suggerimento non è impostato sulla creazione del frammento e della vista, devo fare clic sul mio EditTextper impostare il colore del suggerimento su tutti gli input all'interno della vista ... non ho ancora trovato alcuna correzione ( requestFocus()e performClick()non fare il trucco purtroppo).
flawyte,

1
ha funzionato se usato come attributo: <EditText android: inputType = "textMultiLine" android: lines = "4" android: gravity = "top | right" android: layout_width = "fill_parent" android: layout_height = "match_parent" android: hint = " suggerimento "android: textColorHint =" # 919389 "/>
masoud Cheragee,

75

Crea uno stile personalizzato in style.xml

<style name="EditTextHint" parent="TextAppearance.AppCompat">
    <item name="colorAccent">@android:color/white</item>
    <item name="android:textColorHint">@color/BackgroundtWhiteColor</item>
    <item name="colorControlNormal">@color/BackgroundtWhiteColor</item>
    <item name="colorControlActivated">@color/your color</item>
    <item name="colorControlHighlight">@color/BackgroundtWhiteColor</item>
</style>

Quindi nel tuo file xml di layout, aggiungi l' attributo tema come di seguito

 <android.support.design.widget.TextInputLayout
            android:theme="@style/EditTextHint"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

      <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

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

spero che funzioni


4
Mostra "Errore durante il gonfiaggio della classe EditText". Per favore aiuto !
Mohit Khaitan,

@Coder alcuni degli attributi che ha aggiunto sono per 21+
Mr.O

49

Aggiungi la proprietà textColorHint al testo di modifica

android:textColorHint="#F6F6F6"

o qualunque colore tu voglia


41

ha lo stesso problema. Risolto inserendo queste righe nel tema principale .

 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/ColorPrimaryDark</item>
    <item name="colorPrimaryDark">@color/ColorPrimaryDark</item>
    <item name="colorAccent">@color/AccentColor</item>
    <item name="android:windowTranslucentStatus">true</item>

    <item name="android:textColorHint">@color/BackgroundtWhiteColor</item>
    <item name="colorControlNormal">@color/BackgroundtWhiteColor</item>
    <item name="colorControlActivated">#ff0000</item>
    <item name="colorControlHighlight">@color/BackgroundtWhiteColor</item>
    <!-- Customize your theme here. -->
</style>

Se metti questi

<item name="android:textColorHint">@color/BackgroundtWhiteColor</item>
<item name="colorControlNormal">@color/BackgroundtWhiteColor</item>
<item name="colorControlActivated">#ff0000</item>
<item name="colorControlHighlight">@color/BackgroundtWhiteColor</item>

in uno stile separato e applicarlo a TextInputLayout o Edittext non verrà visualizzato. Si HAI per metterlo in tema genitore dell'applicazione.


3
È davvero frustrante non poter avere più stili di input nell'app usando questo widget, ma per quanto ne so, hai ragione. : /
Turnsole

4
Bene, non è necessario averlo nell'intera applicazione. È possibile applicare questo tema solo a un'attività nel file manifest. E crea un altro tema per il resto delle tue attività.
RexSplode,

23

Non sono sicuro di quali siano le cause del tuo problema, questo codice funziona perfettamente per me. Penso che abbia qualcosa a che fare con l'uso dello spazio dei nomi xml corretto ( xmlns). Non sono sicuro se l'utilizzo di android.support.design senza l'attributo namespace xml sia supportato. Oppure ha qualcosa a che fare con l' textColorHintattributo che stai utilizzando su EditText stesso.

Disposizione:

<android.support.design.widget.TextInputLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="5dp"
    app:hintTextAppearance="@style/GreenTextInputLayout">

    <android.support.v7.widget.AppCompatEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="test"
        android:inputType="text" />
</android.support.design.widget.TextInputLayout>

Stile:

<style name="GreenTextInputLayout" parent="@android:style/TextAppearance">
    <item name="android:textColor">#00FF00</item>
</style>

2
Funziona ancora come quello che ho. Il problema che sto riscontrando è che prima che l'utente tocchi EditText, il colore EditText è bianco. Quando l'utente tocca EditText, l'etichetta TextInputLayout è verde e funziona correttamente.
SamIAmHarris,

stesso problema qui @ user3520299, qualche fortuna trovare una soluzione?
Ahmed,

Il mio è stato un caso unico perché la vista principale aveva un set di temi che causava il problema. Ma il codice che ho messo su funziona bene ora dopo aver rimosso quel tema
SamIAmHarris,

1
Funziona con il suggerimento mobile, ma non con il suggerimento all'interno del controllo EditText vuoto. Per questo, aggiorna il tema dell'applicazione secondo la risposta di @ mbelsky
Richard Le Mesurier,

A proposito, l'app predefinita: hintTextAppearance style è @style/TextAppearance.Design.Hint, quindi potresti voler usarlo come tuo parentpiuttosto che @android:style/TextAppearanceo@style/TextAppearance.AppCompat
rockgecko

19

Fai riferimento al codice seguente che ha funzionato per me, ma influirà su tutti i colori dei controlli.

 <!-- In your style.xml file -->
    <style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
            <!--EditText hint color-->
            <item name="android:textColorHint">@color/default_app_white</item>
           <!-- TextInputLayout text color-->
            <item name="colorControlActivated">@color/default_app_green</item>
            <!-- EditText line color when EditText on-focus-->
            <item name="colorControlHighlight">@color/default_app_green</item>
            <!-- EditText line color when EditText  in un-focus-->
            <item name="colorControlNormal">@color/default_app_white</item>
        </style>

Questo dovrebbe essere accettato: mostra quali proprietà vengono utilizzate per ciascuno degli elementi importanti.
Richard Le Mesurier,

15

Nel TextInputLayout che contiene EditText, aggiungere:

android:textColorHint="someColor"

14

Molte risposte ma per questo serve solo una riga:

Android: textColorHint = "# 000000"

    <EditText
        android:id="@+id/edtEmail"
        android:textColorHint="#000000"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

10

android: textColorHint = "# FFFFFF" a volte funziona e a volte no. Per me sotto la soluzione funziona perfettamente

Prova il codice qui sotto Funziona nel tuo file XML e il tema TextLabel è definito in style.xml

 <android.support.design.widget.TextInputLayout
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:theme="@style/MyTextLabel">

     <EditText
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:hint="Floating Label"
         android:id="@+id/edtText"/>

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

Nella cartella Stili Codice etichetta testo

 <style name="MyTextLabel" parent="TextAppearance.AppCompat">
    <!-- Hint color and label color in FALSE state -->
    <item name="android:textColorHint">@color/Color Name</item> 
<!--The size of the text appear on label in false state -->
    <item name="android:textSize">20sp</item>
    <!-- Label color in TRUE state and bar color FALSE and TRUE State -->
    <item name="colorAccent">@color/Color Name</item>
    <item name="colorControlNormal">@color/Color Name</item>
    <item name="colorControlActivated">@color/Color Name</item>
 </style>

Se si desidera solo cambiare il colore dell'etichetta in falso, colorAccent, colorControlNormal e colorControlActivated non sono richiesti


10

Puoi usare android:textColorHint="@color/color_black"dentro TextInputlayoutHa funzionato per me.

<android.support.design.widget.TextInputLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/dp_10"
                android:textColorHint="@color/color_black"
                app:hintTextAppearance="@style/TextLabel">

                <EditText
                    android:id="@+id/et_state"
                    style="@style/profile_editTextStyle"

                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/billingState"
                    android:text="@string/billingState"
                     />
            </android.support.design.widget.TextInputLayout>

8

Secondo questo: https://code.google.com/p/android/issues/detail?id=176559

Prova questo:

<android.support.design.widget.TextInputLayout
    android:textColorHint="#A7B7C2"
    android:layout_width="match_parent"
    android:layout_height="50dp">

    <EditText
        android:id="@+id/et_confirm_password"
        android:textColor="@android:color/black"
        android:hint="Confirm password"
        android:inputType="textPassword"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
 </android.support.design.widget.TextInputLayout>

Funziona in 23.1.1


6

Con la libreria Componenti materiali è possibile personalizzare il TextInputLayoutcolore del testo del suggerimento utilizzando:

  • Nel layout:

    • app:hintTextColor attributo: il colore dell'etichetta quando viene compresso e il campo di testo è attivo
    • android:textColorHint attributo: il colore dell'etichetta in tutti gli altri stati dei campi di testo (come riposo e disabilitato)

Qualcosa di simile a:

<com.google.android.material.textfield.TextInputLayout
     app:hintTextColor="@color/mycolor"
     android:textColorHint="@color/text_input_hint_selector"
     .../>

inserisci qui la descrizione dell'immagineinserisci qui la descrizione dell'immagine


5

Sembra che la vista padre avesse uno stile per una libreria di terze parti che stava facendo diventare EditText bianco.

android:theme="@style/com_mixpanel_android_SurveyActivityTheme"

Una volta rimosso, tutto ha funzionato bene.


5

prova questo può essere di aiuto

      edittext.addTextChangedListener(new  TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), "onTextChanged", 2000).show();;
            //newuser.setTextColor(Color.RED);
            edittext.setHintTextColor(Color.RED);

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), "afterTextChanged", 2000).show();;

        }
    });

perché l'hai inserito nel listener onTextChanged?
user25

5

tardi ma può aiutare qualcuno che ho fatto in questo modo

<android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_marginLeft="30dp"
        android:layout_marginStart="30dp"
        android:textColorHint="#8cffffff">

        <android.support.v7.widget.AppCompatEditText
            android:id="@+id/email_edit"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/security_email"
            android:inputType="textEmailAddress"
            android:textColor="@color/white"
            app:backgroundTint="#8cffffff" />
    </android.support.design.widget.TextInputLayout>

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

cambia il colore Accento al colore desiderato all'interno del tuo tema, questo cambierà la tua linea EditText, il cursore e il tuo suggerimento

oppure puoi anche includere questo stile nel tuo style.xml

<style name="TextLabel" parent="TextAppearance.AppCompat">
    <!-- Hint color and label color in FALSE state -->
    <item name="android:textColorHint">@android:color/black</item>
    <item name="android:textSize">20sp</item>
    <!-- Label color in TRUE state and bar color FALSE and TRUE State -->
    <item name="colorAccent">@android:color/black</item>
    <item name="colorControlNormal">@android:color/black</item>
    <item name="colorControlActivated">@android:color/black</item>
</style>

quindi all'interno di TextInputLayout puoi metterlo in questo modo

<android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/TextLabel">
            <EditText
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:drawableLeft="@drawable/password"
                android:drawableStart="@drawable/password"
                android:maxLines="1"
                android:hint="password"
                android:inputType="textWebPassword" />

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

3
        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Name"
                android:textColor="@color/black"
                android:textColorHint="@color/grey"/>
        </android.support.design.widget.TextInputLayout>

Utilizzare textColorHint per impostare il colore desiderato come colore del suggerimento per EditText. Il fatto è che il suggerimento in EditText scompare non quando si digita qualcosa, ma immediatamente quando EditText viene attivato (con una bella animazione). Lo noterai chiaramente quando cambi la messa a fuoco e vai al EditText.


3

Dalla documentazione:

Il suggerimento deve essere impostato su TextInputLayout, anziché su EditText. Se viene specificato un suggerimento su EditText figlio in XML, TextInputLayout potrebbe comunque funzionare correttamente; TextInputLayout utilizzerà il suggerimento di EditText come etichetta mobile. Tuttavia, le chiamate future per modificare il suggerimento non aggiorneranno il suggerimento di TextInputLayout. Per evitare comportamenti non intenzionali, chiamare setHint (CharSequence) e getHint () su TextInputLayout, anziché su EditText.

Prova a impostare android:hinte app:hintTextColorattivare TextInputLayoutanziché attivare TextInputEditText.


1

È necessario impostare il colore del suggerimento su TextInputLayout.


1
 <android.support.design.widget.TextInputLayout
        android:id="@+id/input_layout_passdword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColorHint="#d3d3d3">
        <EditText
            android:id="@+id/etaddrfess_ciwty"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/transparent"
            android:bottomLeftRadius="10dp"
            android:bottomRightRadius="50dp"
            android:fontFamily="@font/frutiger"
            android:gravity="start"
            android:hint="@string/address_city"
            android:padding="10dp"
            android:textColor="#000000"
            android:textColorHint="#000000"
            android:textSize="14sp"
            android:topLeftRadius="10dp"
            android:topRightRadius="10dp" />
    </android.support.design.widget.TextInputLayout>``

0

Prova il codice qui sotto:

Il colore chiaro è bianco:

 <android.support.design.widget.TextInputLayout
        android:id="@+id/input_layout_mobile"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/TextStyle"
        >

        <EditText
            android:id="@+id/input_mobile"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:drawablePadding="14dp"
            android:drawableLeft="8dp"
            android:textColor="@color/white"
            android:hint="Mobile" />
    </android.support.design.widget.TextInputLayout>

stile: TextStyle

    <style name="TextStyle" parent="TextAppearance.AppCompat">
    <!-- Hint color and label color in FALSE state -->
    <item name="android:textColorHint">@color/white</item>
    <item name="android:textSize">20sp</item>
    <!-- Label color in TRUE state and bar color FALSE and TRUE State -->
    <item name="colorAccent">@color/white</item>
    <item name="colorControlNormal">@color/white</item>
    <item name="colorControlActivated">@color/white</item>
     </style>

0

Ecco la mia esperienza con questo problema simile e la soluzione richiesta.

Requisiti:

  • È necessario creare personalizzazioni TextInputEditText(si può dire che alcuni dovrebbero essere trasparenti e altri non dovrebbero, ma usare colori personalizzati per vari eventi)

Problema affrontato:

  • android:textColorHint non funziona come richiesto.

Soluzioni tentate, che fallirono:

  • Utilizzato android:textColorHintcon stile e applicato a TextInputEditText. Nessun risultato o differenza.
  • Impostato android:textColorHintnel tema dell'applicazione applicato. Ha aiutato, ma ora è stato impostato per l'intera applicazione. (Non aggiornato per requisito)

Dopo un sacco di RnD, la migliore SOLUZIONE trovata era in un articolo che descriveva che dobbiamo applicare il tema alla TextInputLayoutsua vista padre piuttosto che applicare solo lo stile alla TextInputEditTextsua vista padre.

Si prega di controllare TextInputLayout Theming corretto che ha detto che siamo sulla strada sbagliata.


0

Quando ho provato a impostare l'attributo del tema su TextInputLayout, il tema veniva anche applicato al suo edittext di vista figlio, cosa che non volevo.

Quindi la soluzione che ha funzionato per me è stata quella di aggiungere uno stile personalizzato alla proprietà "app: hintTextAppearance" di TextInputLayout.

In styles.xml aggiungi il seguente stile:

<style name="TextInputLayoutTextAppearance" parent="TextAppearance.AppCompat">
    <item name="android:textColor">@color/text_color</item>
    <item name="android:textSize">@dimen/text_size_12</item>
</style>

E applica questo stile alla proprietà "app: hintTextAppearance" di TextInputLayout come di seguito:

<com.google.android.material.textfield.TextInputLayout
        android:id="@+id/mobile_num_til"
        android:layout_width="0dp"
        android:layout_height="@dimen/dim_56"
        app:layout_constraintStart_toStartOf="@id/title_tv"
        app:layout_constraintEnd_toEndOf="@id/title_tv"
        app:layout_constraintTop_toBottomOf="@id/sub_title_tv"
        android:layout_marginTop="@dimen/dim_30"
        android:padding="@dimen/dim_8"
        app:hintTextAppearance="@style/TextInputLayoutTextAppearance"
        android:background="@drawable/rect_round_corner_grey_outline">

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/mobile_num_et"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:hint="@string/mobile_number"
            android:gravity="center_vertical"
            android:background="@android:color/transparent"/>

    </com.google.android.material.textfield.TextInputLayout>

0

Se stai usando la nuova libreria di progettazione dei materiali androidx, com.google.android.material puoi usare la lista colori per controllare il colore del testo dei suggerimenti nello stato attivo, in bilico e predefinito come segue. (ispirato da questo )

In res/color/text_input_box_stroke.xmlpoche parole qualcosa di simile al seguente:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#fcc" android:state_focused="true"/>
    <item android:color="#cfc" android:state_hovered="true"/>
    <item android:color="#ccf"/>
</selector>

Quindi nel tuo styles.xmlinseriresti:

<style name="MtTILStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
    <item name="boxStrokeColor">@color/text_input_box_stroke</item>
    <item name="hintTextColor">@color/text_input_box_stroke</item>
</style>

Infine, indica il tuo stile nell'attuale. TextInputLayout Per qualche motivo, devi anche impostare il android:textColorHintcolore predefinito del suggerimento per il testo:

<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/my_layout_id"
    style="@style/LoginTextInputLayoutStyle"
    android:textColorHint="#ccf"
    ...

0

se si sta utilizzando la libreria di progettazione dei materiali. Attualmente sto usando la versione

implementazione "com.google.android.material: materiale: 1.3.0-alpha01"

1 - Imposta il colore quando TextInputLayout è in pausa.

<item name="android:textColorHint">@color/your_color_hint</item>

2 - Imposta il colore quando TextInputLayout è mobile / focalizzato / toccato.

<item name="hintTextColor">@color/your_color_floating_hint</item>

3 - Imposta il colore della linea in TextInputLayout.

<item name="boxStrokeColor">@color/TextViewColor_line</item>

4 - Imposta il colore dell'errore in TextInputLayout.

<item name="boxStrokeErrorColor">@color/colorPrimary</item>

0

Volevo solo cambiare il colore dell'etichetta quando veniva sollevato verso l'alto. Ma l'impostazione textColorHintcambia il colore in ogni stato. Quindi, questo ha funzionato per me:

   <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
       ...
        <item name="colorControlActivated">@color/colorPrimary</item>
       ...
    </style>

Questo cambierà il colore quando l'input è focalizzato.

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.