2016-02-28 20 views
11

Uso un TextInputLayout, vorrei impostare a livello di codice il colore del testo suggerito e il colore dell'etichetta mobile se il campo di immissione è obbligatorio. Prima di trasferirsi in TextInputLayout ho usato per impostare il colore del testo di suggerimento a livello di codice utilizzando il seguenteImposta programmaticamente TextInputLayout Testo suggerito Colore colore e etichetta mobile

textField.setHintTextColor(Color.RED);

Può qualcuno mi guida su come impostare il colore del testo suggerimento e il colore dell'etichetta galleggiante di programmazione per un TextInputLayout.

Nel screenshot allegato vorrei il testo di suggerimento Indirizzo 1 di essere in rosso quando non concentrato e la messa a fuoco sul galleggiante dell'etichetta Indirizzo 1 dovrebbe essere in rosso.

enter image description here

+0

Aggiungere un onFocusChangeListener al testo di modifica e modificare il colore del suggerimento, onFocusChangeListener fornisce un valore booleano nei suoi parametri che è vero se il testo di modifica è attivo e falso quando lo stato attivo viene rimosso. Imposta di conseguenza hintTextColor. –

+0

Non ho provato, ma penso che questo dovrebbe funzionare per voi: InputTextLayout.getEditText(). SetHintTextColor (Color.RED); – Stanojkovic

+0

@Stanojkovic Ho provato che non funziona. –

risposta

-3

sono stato in grado di ottenere il FloatingLabel in rosso con la seguente

textInputLayout.setErrorEnabled(true); 
textInputLayout.setError(" "); 

enter image description here

+1

Questo è solo un modo per forzare l'aspetto di TextInputLayout come testo di errore Risposta da @alexandrius –

+0

Bene che ha risolto il mio problema quindi accettato come risposta! –

5

Si prega di tenere un buon un'occhiata alla documentazione qui: TextInputLayout Methods

Ci

è un metodo:

setHintTextAppearance(int resId) 

che accetta un ID di risorsa che potrebbe essere una risorsa colore!

Vorrei provare questo e vedere come va!

Spero che ti aiuti!

+0

provato quanto segue \t if (isMandatory()) { \t \t \t \t \t textInputLayout.setHintTextAppearance (Color.RED); \t \t \t \t \t \t} ancora senza fortuna. isMandatory() è un metodo che indica se il campo è obbligatorio :-( –

+1

Prova questa risposta http://stackoverflow.com/questions/33709066/how-to-set-textinputlayout-error-message-colour?rq=1 – Eenvincible

+0

Che in qualche modo non ha funzionato anche per me.Ho provato questo testoInputLayout.setErrorEnabled (true); textInputLayout.setError (""); questo mostra l'etichetta mobile in rosso ora, tuttavia non viene visualizzato alcun testo suggerimento. –

8

ho cambiato colore concentrato con la riflessione. Ecco lo snippet che potrebbe aiutare qualcuno.

private void setUpperHintColor(int color) { 
    try { 
     Field field = textInputLayout.getClass().getDeclaredField("mFocusedTextColor"); 
     field.setAccessible(true); 
     int[][] states = new int[][]{ 
       new int[]{} 
     }; 
     int[] colors = new int[]{ 
       color 
     }; 
     ColorStateList myList = new ColorStateList(states, colors); 
     field.set(textInputLayout, myList); 

     Method method = textInputLayout.getClass().getDeclaredMethod("updateLabelState", boolean.class); 
     method.setAccessible(true); 
     method.invoke(textInputLayout, true); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

Sei un uomo fantastico, se sapessi quanto tempo ho speso per trovare una soluzione! – Hesam

+0

Grazie ma Non suggerisco davvero di usare questo metodo. – alexandrius

+0

So perché non suggerire ma non ho trovato un modo normale utilizzando i metodi Android per cambiare il colore in modo dinamico. Hai qualche idea su come farlo? Grazie – Hesam

2

Normalmente il colore del testo suggerimento TextInputLayout proviene da colorAccent dell'app.

Ma se si desidera cambiare, è possibile utilizzare lo stile per quello.

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

@style

<style name="TextLabel" parent="TextAppearance.AppCompat"> 
    <!-- Hint color and label color in FALSE state --> 
    <item name="android:textColorHint">@color/Color Name</item> 
    <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> 

Ma se si desidera aggiungere colore rosso allora come si può distinguere il colore con l'errore significa errore standard di base sono di colore rosso.

textField.setHintTextColor (Color.RED); Qualcuno può guidarmi su come impostare il colore del testo suggerimento e il colore dell'etichetta mobile a livello di programmazione per un TextInputLayout.

setHintTextColor lavora per API 23+

1

per cambiare la sia Focused Color e Default Text Color per TextInput layout

private void setInputTextLayoutColor(int color, TextInputLayout textInputLayout) { 
    try { 
     Field field = textInputLayout.getClass().getDeclaredField("mFocusedTextColor"); 
     field.setAccessible(true); 
     int[][] states = new int[][]{ 
       new int[]{} 
     }; 
     int[] colors = new int[]{ 
       color 
     }; 
     ColorStateList myList = new ColorStateList(states, colors); 
     field.set(textInputLayout, myList); 

     Field fDefaultTextColor = TextInputLayout.class.getDeclaredField("mDefaultTextColor"); 
     fDefaultTextColor.setAccessible(true); 
     fDefaultTextColor.set(textInputLayout, myList); 

     Method method = textInputLayout.getClass().getDeclaredMethod("updateLabelState", boolean.class); 
     method.setAccessible(true); 
     method.invoke(textInputLayout, true); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

EDIT: Per modificare il colore della linea AppCompactEditText

È necessario impostare backgroundTintList (o supportBackgroundTintList) su EditText a un'istanza di ColorStateList contenente solo il colore a cui si desidera modificare la tinta. Un modo semplice per farlo in modo compatibile con le versioni precedenti è simile al seguente:

ColorStateList colorStateList = ColorStateList.valueOf(color) 
editText.setSupportBackgroundTintList(colorStateList) 

Questo darà la EditText il colore della sottolineatura desiderato.