2010-10-23 7 views
21

Nella schermata delle preferenze ho una preferenza che quando si fa clic apre una finestra di dialogo per la selezione dei colori. Quello che vorrei fare è quando l'utente seleziona un colore, che il riepilogo del testo della preferenza è visualizzato in quel colore.Come posso impostare il colore del testo di riepilogo delle preferenze Android?

So che posso impostare il sommario in questo modo, Currently <font color="#ff0000">this color</font> e visualizzarlo con quel colore. Il problema è che il colore che sto recuperando è il colore Android int.

Potrei usare i metodi red(), green(), blue() e convertirli in esadecimale e combinarli in una stringa in modo da poter impostare il testo di riepilogo con il nuovo valore e che funzioni: String colorString = String.format("#%02x%02x%02x",Color.red(defaultColor), Color.green(defaultColor), Color.blue(defaultColor)); I era solo curioso di sapere se esiste un modo più semplice per farlo.

Grazie in anticipo.

Sean

risposta

31

OK quello che ho finito per fare stava utilizzando uno Spannable. Questo prende il colore come un numero intero.

Spannable summary = new SpannableString("Currently This Color"); 
summary.setSpan(new ForegroundColorSpan(color), 0, summary.length(), 0); 
preference.setSummary(summary); 
+0

grazie mille !! questo funziona perfettamente – berlindev

-1

Hi è possibile modificare il colore di preferenza utilizzando Html.fromHtml().

ex: private String title = "" + "Imposta il limite di invio SMS" + "";

e aggiungi imposta questa stringa dalla tua applicazione Android in questo modo.

CheckBoxPreference _test = (CheckBoxPreference) findPreference ("testo"); _test .setTitle (Html.fromHtml (titolo));

Segui questo link per la visualizzazione HTML di Android: http://www.androidpeople.com/tag/html-tags/

Grazie

+2

Ne sono consapevole. Tuttavia, come ho detto sopra, ho accesso al colore come int che è come lo memorizza Android. Non le stringhe RGB o ARGB. – Sean

2

un po 'tardi, ma ho trovato utile scrivere questi metodi indipendenti:

private void setColorPreferencesTitle(EditTextPreference textPref, int color) { 
    CharSequence cs  = (CharSequence) textPref.getTitle(); 
    String plainTitle = cs.subSequence(0, cs.length()).toString(); 
    Spannable coloredTitle = new SpannableString (plainTitle); 
    coloredTitle.setSpan(new ForegroundColorSpan(color), 0, coloredTitle.length(), 0); 
    textPref.setTitle(coloredTitle); 
} 

private void resetColorPreferencesTitle(EditTextPreference textPref) { 
    CharSequence cs  = (CharSequence) textPref.getTitle(); 
    String plainTitle = cs.subSequence(0, cs.length()).toString(); 
    textPref.setTitle(plainTitle); 
} 
3

Usa Html.fromHtml per lo stile il testo.

mPodFolderPref.setTitle(Html.fromHtml("<font color='red'>" + mPodFolderPref.getTitle() + "</font>")); 
mPodFolderPref.setSummary(Html.fromHtml("<font color='red'>" + mPodFolderPref.getSummary() + "</font>")); 

Html.fromHtml può fare molto per voi.

+0

Non sono sicuro del motivo del downvoted, ma questa è la risposta più semplice alla domanda e la più semplice da implementare. – Mendhak

+0

La soluzione .fromHtml consente inoltre di modificare molti attributi oltre al testo semplice, ad esempio in grassetto. Quindi, è la risposta molto più preziosa per me. Upvoted. – MojioMS

+0

È ammortizzato. – Yetti99

1

Tutti i modi di cui sopra non mi hanno aiutato. Ho finito per estendere la classe Prefernces:

public class CustomListPreferences extends Preference { 

    public CustomListPreferences(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public CustomListPreferences(Context context) { 
     super(context); 
    } 

    @Override 
    protected void onBindView(View view) { 
     super.onBindView(view); 
     ((TextView)view.findViewById(android.R.id.summary)).setTextColor(getContext().get Resources().getColor(R.color.green)); 
    } 

}