2010-10-23 20 views
21

Na moim ekranie preferencji mam opcję, która po kliknięciu otwiera okno dialogowe wyboru koloru. Chciałbym to zrobić, gdy użytkownik wybierze kolor, a podsumowanie tego preferencji zostanie wyświetlone w tym kolorze.Jak ustawić kolor tekstu podsumowania preferencji Androida?

Wiem, że mogę mieć zestaw podsumowań w ten sposób, Currently <font color="#ff0000">this color</font> i wyświetlić go w tym kolorze. Problem polega na tym, że kolor, który otrzymuję, to kolor int android.

Mogę użyć metod red(), green(), blue(), a następnie przekonwertować je na Hex, a następnie połączyć je w ciąg znaków, aby ustawić tekst podsumowania z nową wartością, która zadziała: String colorString = String.format("#%02x%02x%02x",Color.red(defaultColor), Color.green(defaultColor), Color.blue(defaultColor)); I był ciekawy, czy jest łatwiejszy sposób na zrobienie tego.

Dziękuję z wyprzedzeniem.

Sean

Odpowiedz

31

OK, co skończyło się robi używał Spannable. To przyjmuje kolor jako liczbę całkowitą.

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

dzięki dużo! ten działa bezbłędnie – berlindev

-1

Hi można zmienić kolor preferencjami używając Html.fromHtml().

ex: private String title = "" "" Ustaw limit wysyłania SMS "+" ";

i dodaj ustawić ten ciąg z aplikacji na Androida w ten sposób.

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

poniższy link do widoku HTML Androidzie: http://www.androidpeople.com/tag/html-tags/

Thanks

+2

Jestem tego świadomy. Jednak, jak już wspomniałem powyżej, mam dostęp do koloru jako int, który zapisuje go Android. Nie ciągi RGB ani ARGB. – Sean

2

Trochę późno, ale znalazłem przydatny do pisania tych metod samodzielne:

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

Używaj Html.fromHtml do stylu tekstu.

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

Html.fromHtml może wiele dla ciebie zrobić.

+0

Nie wiem, dlaczego jest wycofywany, ale jest to najprostsza odpowiedź na to pytanie i najłatwiejsza do wdrożenia. – Mendhak

+0

Rozwiązanie .fromHtml umożliwia również zmianę wielu atrybutów, poza tekstem, takim jak , aby pogrubić tekst. Dlatego jest to dla mnie o wiele bardziej wartościowa odpowiedź. Rewizja. – MojioMS

+0

Jego amortyzacja. – Yetti99

1

Wszystkie powyższe sposoby mi nie pomogły. Skończyło się to na rozszerzeniu klasy 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)); 
    } 

}