2010-10-23 8 views
21

Sur mon écran de préférences, j'ai une préférence qui, lorsqu'on clique sur, ouvre une boîte de dialogue de sélection de couleur. Ce que je voudrais faire, c'est quand l'utilisateur sélectionne une couleur, que le résumé du texte de la préférence est affiché dans cette couleur.Comment puis-je définir la couleur du texte de synthèse des préférences Android?

Je sais que je peux avoir le résumé mis en place comme ceci, Currently <font color="#ff0000">this color</font> et l'afficher dans cette couleur. Le problème est la couleur que je récupère est la couleur int android.

Je pourrais utiliser les méthodes red(), green(), blue(), puis les convertir en hexadécimal, puis les combiner en une chaîne afin que je puisse définir le texte récapitulatif avec la nouvelle valeur: String colorString = String.format("#%02x%02x%02x",Color.red(defaultColor), Color.green(defaultColor), Color.blue(defaultColor)); I était juste curieux s'il y avait un moyen plus facile de le faire.

Merci d'avance.

Sean

Répondre

31

OK ce que je fini par faire utilisait un Spannable. Cela prend la couleur en entier.

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

merci beaucoup !! celui-ci fonctionne parfaitement – berlindev

-1

Salut, vous pouvez changer la couleur de préférence en utilisant Html.fromHtml().

ex: private Chaîne title = "" + "Définir la limite d'envoi SMS" + "";

et ajoutez cette chaîne à partir de votre application Android comme ceci.

CheckBoxPreference _test = (CheckBoxPreference) findPreference ("text"); _test .setTitle (Html.fromHtml (titre));

suivre ce lien pour une vue html android: http://www.androidpeople.com/tag/html-tags/

Merci

+2

Je suis conscient de cela. Cependant, comme je l'ai dit ci-dessus, j'ai accès à la couleur comme un int qui est comment Android stocke. Pas les chaînes RGB ou ARGB. – Sean

2

Un peu en retard, mais je trouve utile d'écrire ces méthodes autonomes:

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

Utilisez Html.fromHtml pour le style de votre texte.

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

Html.fromHtml peut faire beaucoup pour vous.

+0

Vous ne savez pas pourquoi c'est en downvoted mais c'est la réponse la plus simple à la question et la plus facile à implémenter. – Mendhak

+0

La solution .fromHtml vous permet également de modifier beaucoup plus d'attributs que la simple couleur, par exemple pour mettre le texte en gras. Par conséquent, c'est la réponse la plus précieuse pour moi. Upvoted. – MojioMS

+0

Son déprécié. – Yetti99

1

Toutes les façons ci-dessus ne m'a pas aidé. J'ai fini par étendre 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)); 
    } 

} 
Questions connexes