2011-12-22 3 views
5

Ho uno Activity che contiene uno EditText su 3.1. In base all'input dell'utente, modifico il colore del testo in EditText (rosso per un errore), quindi lo ripristino in nero quando il testo è OK.Ottieni un valore di colore "predefinito" di EditText dal tema

Un problema riguarda la modifica del tema generale dell'attività. Ad esempio, cambiandolo al tema scuro normale dal tema della luce risulta che il testo nero viene visualizzato su uno sfondo nero, quindi ho bisogno di entrare e modificare il codice, invece di reimpostare il testo in bianco quando i dati sono OK.

Invece di dover modificare questo codice se apporto un tema all'attività, mi chiedevo se c'era un modo per estrarre il testo predefinito del testo di EditText per un determinato tema a livello di codice, quindi posso semplicemente cambiare il testo indietro al colore predefinito invece di hard-coding in bianco, nero, ecc.

risposta

8

Utilizzare R.attr.

setTextColor(android.R.attr.editTextColor) 
+0

Questo va bene, ma solo per Honeycomb e avanti – Panthro

+1

Non si dovrebbe risolvere l'attributo come in questa risposta? http://stackoverflow.com/a/23543990/1245231 – petrsyn

4

EditText.getCurrentTextColor() e EditText.getTextColors() fornirà anche il colore predefinito se li si recupera prima di cambiare il colore. Inoltre questo approccio può essere utilizzato pre 3.0 che non è possibile quando si utilizza android.R.attr.editTextColor.

7

In base allo Theme's docs ottenere il colore direttamente utilizzando obtainStyledAttributes.

TypedArray themeArray = context.getTheme().obtainStyledAttributes(new int[] {android.R.attr.editTextColor}); 
try { 
    int index = 0; 
    int defaultColourValue = 0; 
    int editTextColour = themeArray.getColor(index, defaultColourValue); 
} 
finally 
{ 
    // Calling recycle() is important. Especially if you use alot of TypedArrays 
    // http://stackoverflow.com/a/13805641/8524 
    themeArray.recycle(); 
} 
+1

Non dimenticare di chiamare 'recycle()' sul tuo TypedArray dopo aver finito con esso. – iamreptar