2010-10-23 8 views
21

На моем экране предпочтений я предпочитаю, чтобы при нажатии открывается диалоговое окно выбора цвета. То, что я хотел бы сделать, - это когда пользователь выбирает цвет, чтобы текст этого предпочтения отображался в этом цвете.Как настроить цвет текста андроида?

Я знаю, что у меня есть сводная информация, подобная этой, Currently <font color="#ff0000">this color</font> и ее отображение в этом цвете. Проблема в том, что цвет, который я получаю, является цветом android int.

Я мог бы использовать методы red(), green(), blue(), а затем преобразовать их в Hex, а затем объединить их в строку, чтобы я мог установить сводный текст с новым значением и работает: String colorString = String.format("#%02x%02x%02x",Color.red(defaultColor), Color.green(defaultColor), Color.blue(defaultColor)); I было просто любопытно, если есть более простой способ сделать это.

Спасибо заранее.

Шон

ответ

31

ОК, что я в конечном итоге делает использовал Spannable. Это принимает цвет как целое число.

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

спасибо большое! этот работает безупречно – berlindev

-1

Привет вы можете изменить цвет предпочтения, используя Html.fromHtml().

ex: private String title = "" + "Установить лимит отправки SMS" + "";

и добавьте эту строку в свое приложение для Android.

CheckBoxPreference _test = (CheckBoxPreference) findPreference ("text"); _test .setTitle (Html.fromHtml (заголовок));

по этой ссылке для HTML зрения андроида: http://www.androidpeople.com/tag/html-tags/

Благодарности

+2

Мне это известно. Однако, как я уже сказал выше, у меня есть доступ к цвету как int, который поддерживает Android. Не строки RGB или ARGB. – Sean

2

Немного поздно, но я нашел полезным, чтобы написать эти автономные методы:

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

Используйте Html.fromHtml стилизовать текст.

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

Html.fromHtml может много сделать для вас.

+0

Не уверен, почему он сокращен, но это самый простой ответ на вопрос и самый простой в реализации. – Mendhak

+0

.FromHtml-решение также позволяет вам изменять множество атрибутов больше, чем только текст, например , чтобы выделить текст жирным шрифтом. Следовательно, это гораздо более ценный ответ для меня. Upvoted. – MojioMS

+0

Его обесцененный. – Yetti99

1

Все вышеперечисленные способы мне не помогли. Я закончил тем, что расширил класс 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)); 
    } 

}