2010-10-23 17 views
21

En mi pantalla de preferencias tengo una preferencia que cuando se hace clic se abre un cuadro de diálogo selector de color. Lo que me gustaría hacer es cuando el usuario selecciona un color, que el resumen de texto de la preferencia se muestra en ese color.¿Cómo puedo configurar el color de texto de resumen de preferencia de Android?

Sé que puedo configurar el resumen como este, Currently <font color="#ff0000">this color</font> y mostrarlo en ese color. El problema es que el color que estoy recuperando es el color int Android.

Podría usar los métodos rojo(), verde(), azul() y luego convertirlos a hexadecimal y luego combinarlos en una cadena para poder establecer el texto de resumen con el nuevo valor y eso funciona: String colorString = String.format("#%02x%02x%02x",Color.red(defaultColor), Color.green(defaultColor), Color.blue(defaultColor)); I era curioso si hay una manera más fácil de hacer esto.

Gracias de antemano.

Sean

Respuesta

31

Aceptar lo que terminó haciendo fue el uso de un Spannable. Esto toma el color como un entero.

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

muchas gracias! este funciona sin problemas – berlindev

-1

Hola se puede cambiar el color de preferencia usando Html.fromHtml().

ex: private String title = "" + "Establece el límite de envío de SMS" + "";

y agrega establecer esta cadena desde su aplicación de Android de esta manera.

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

siga este enlace para la vista HTML del androide: http://www.androidpeople.com/tag/html-tags/

Gracias

+2

Estoy enterado de eso. Sin embargo, como dije antes, tengo acceso al color como int, que es como lo almacena Android. No las cadenas RGB o ARGB. – Sean

2

Un poco tarde, pero me pareció útil escribir estos métodos independientes:

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

Uso Html.fromHtml el estilo de su texto.

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

Html.fromHtml puede hacer mucho por usted.

+0

No estoy seguro de por qué está siendo downvoted, pero esta es la respuesta más simple a la pregunta y más fácil de implementar. – Mendhak

+0

La solución .fromHtml también le permite cambiar muchos atributos más que el texto textual, como para poner el texto en negrita. Por lo tanto, es la respuesta mucho más valiosa para mí. Upvoted. – MojioMS

+0

Su depreciado. – Yetti99

1

Todas las formas anteriores no me ayudaron. Terminé por extiende la clase Preferencias:

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)); 
    } 

} 
Cuestiones relacionadas