سؤال

على شاشة التفضيل الخاصة بي ، لدي تفضيل أنه عند النقر فوق ، يفتح مربع حوار منتقي الألوان. ما أود القيام به هو عندما يختار المستخدم لونًا ، يتم عرض ملخص النص للتفضيل في هذا اللون.

أعلم أنه يمكنني إعداد الملخص مثل هذا ، 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 )); كنت فضوليًا إذا كان هناك طريقة أسهل للقيام بذلك.

شكرا في وقت مبكر.

شون

هل كانت مفيدة؟

المحلول

حسنًا ، ما انتهى بي الأمر هو استخدام spannable. هذا يأخذ اللون باعتباره عدد صحيح.

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

نصائح أخرى

استخدم html.fromhtml لتصميم النص الخاص بك.

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

HTML.FromHtml يمكن أن تفعل الكثير من أجلك.

متأخر بعض الشيء ، لكنني وجدت مفيدًا لكتابة هذه الأساليب المستقلة بذاتها:

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

كل الطرق المذكورة أعلاه لم تساعدني. انتهى بي الأمر بتوسيع فئة أفضل:

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

}

مرحبًا ، يمكنك تغيير لون التفضيل باستخدام html.fromhtml ().

على سبيل المثال: عنوان السلسلة الخاصة = "" + "قم بتعيين حد إرسال الرسائل القصيرة" + "" ؛

وأضف تعيين هذه السلسلة من تطبيق Android مثل هذا.

checkpreference _test = (checkpreference) findPreference ("text") ؛ _test .SetTitle (html.fromhtml (title)) ؛

اتبع هذا الرابط لعرض HTML لنظام Android:http://www.androidpeople.com/tag/html-tags/

شكرًا

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top