2012-03-09 14 views
9

Esiste comunque un modo per impostare il colore di una risorsa stringa in Android? Voglio dire, so che posso usare alcuni tag html per cambiare lo stile delle stringhe (o sottostringhe) ma non ne ho trovato nessuno per cambiare colore. Ho visto altre soluzioni qui a StackOverflow come passare la stringa a Html.fromHtml (stringa) prima di impostare il testo, ma voglio farlo nell'editor delle risorse stringa. Qualche possibilità?Cambia colore parola nella stringa di risorse

risposta

10

Per quanto ne so non è possibile. Vorrei usare una SpannableString per cambiare il colore.

int colorBlue = getResources().getColor(R.color.blue); 
    String text = getString(R.string.text); 
    SpannableString spannable = new SpannableString(text); 
    // here we set the color 
    spannable.setSpan(new ForegroundColorSpan(colorBlue), 0, text.length(), 0); 

Spannabile è davvero bello. È possibile impostare pensieri come fontseize e cose lì e basta allegarlo a una visualizzazione di testo. Il vantaggio è che puoi avere colori diversi in un'unica vista.

Modifica: Ok, se si desidera impostare solo il colore, la soluzione sopra menzionata è la strada da percorrere.

+0

Vedo, se questa è la strada da percorrere, potrei creare le mie risorse di stringa con qualche "codice" al suo interno per sapere dove inizia e dove finisce la sottostringa che voglio cambiare il colore ed elaborarlo come esposto. Grazie. – Notbad

+0

'int colorBlue = getResources(). GetColor (R.color.blue); .... spannable.setSpan (nuovo ForegroundColorSpan (colorBlue), 0, text.length(), 0); 'può essere sostituito da una singola riga come questa' spannable.setSpan (new ForegroundColorSpan (R.color.blue). .' –

+0

Inoltre, utilizzerei personalmente le costanti di flag dichiarate nella classe "spannable" invece di hard-coding 0 durante la chiamata.Rende un codice più leggibile e mantenibile.Ma qualcosa che vorrei fare .. –

1

Le stringhe stesse non hanno colori, ma è possibile modificare il colore del testo nel testo Visualizza in cui appaiono. Vedere lo textview documentation, ma ci sono 2 modi per farlo.

XML

android:textColor 

Codice

setTextColor(int) 
+0

Grazie per la risposta. Penso che non sia stato ben formulato. Mi sono riferito a cambiare il colore di una sottostringa nella stringa di risorse. Perdonami per quello. – Notbad

19

Sembra this metodo funziona:

<string name="some_text">this is <font fgcolor="#ffff0000">red</font></string> 
+7

Sembra che abbia smesso di funzionare in 4.3 (forse prima) - qualcuno sa cosa succede? –

+5

[Perché ha smesso di funzionare] (https://code.google.com/p/android/issues/detail?id=58192), [come ha smesso di funzionare] (https://github.com/android/platform_frameworks_base/commit/a8f6d5f0720f400b6f59b0809aaefea83c5f51d4), [un bel workaround/coinvolge il codice: (] (http://stackoverflow.com/a/18839246/253468) e una brutta soluzione: per qualsiasi il colore sopra '7fffffff' applica quanto segue:' 'metti' ff6890a5' in una calcolatrice (opti convertire prima in decimale prima) e capovolgere il segno, quindi (facoltativamente riconvertire in hexa) prendere le ultime 8 cifre esadecimali e usare ''. – TWiStErRob

+1

OK, ora ** QUELLO ** era dannatamente brillante. Ha funzionato perfettamente. Grazie mille e vorrei aver saputo di questo tanto tempo fa. –

0

Recentemente ho fatto una soluzione flessibile per questo problema. Mi consente di aggiungere facilmente più stili alle sottostringhe usando il concatenamento del metodo. Fa uso di SpannableString. Quando si desidera assegnare un colore a una determinata sottostringa, è possibile utilizzare ForegroundColorSpan.

public StyledString putColor(String subString, @ColorRes int colorRes){ 
    if(getStartEnd(subString)){ 
     int color = ColorUtil.getColor(context, colorRes); 
     ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(color); 
     fullStringBuilder.setSpan(foregroundColorSpan, startingIndex, endingIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    } 
    return this; 
} 

Per il codice completo vedere gist.

+0

Mentre un link è grande, si prega di [fornire contesto al tuo link (s)] (http://meta.stackoverflow.com/a/8259/169503), come * risposta * dovrebbe contenere una domanda. Tieni presente che essere * poco più di un link a un sito esterno * è una possibile ragione per [Perché e come vengono eliminate alcune risposte?] (Http://stackoverflow.com/help/deleted-answers). – Jan