Я нашел способ извлечь цвет по умолчанию, используемый устройством Android, на котором запущено ваше приложение. Он немного сложен и требует, чтобы вы получили цвет, отображаемый в другом Сводном окне предпочтений вашей деятельности, и сохранили его.во время выполнения.
Затем вы можете использовать тот же цветовой код в других представлениях других предпочтений, гарантируя, что вы всегда получите тот же цветовой код Android, назначенный стандартным предпочтениям.Вот как я это сделал:
Моя деятельность по настройкам имеет обычную CheckBoxPreference, которую я использую для активации или деактивации службы.Я расширил CheckBoxPreference следующим образом, поэтому мое расширение извлекает в rutime цвет по умолчанию, который Android, наконец, дал сводке этого CheckBoxPreference:
public class MyCheckBoxPreference extends android.preference.CheckBoxPreference {
private static int sSummaryColor = Color.WHITE;
private static boolean sInitialized = false;
public MyCheckBoxPreference(Context context) {
super(context);
}
public MyCheckBoxPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyCheckBoxPreference(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void onBindView(View view) {
super.onBindView(view);
if (!sInitialized) {
sSummaryColor = getSummaryColor(view);
sInitialized = true;
}
}
private int getSummaryColor(View view) {
int color = Color.WHITE;
// Gets the color android gave to the summary by default
TextView summaryView = (TextView) view.findViewById(android.R.id.summary);
if (summaryView != null) {
ColorStateList list = summaryView.getTextColors();
if (list != null) {
color = list.getDefaultColor();
}
}
return color;
}
public static int getSummaryColor() {
return sSummaryColor;
}
}
В своем файле Preferences.xml я создаю это предпочтение как MyCheckBoxPreference вместо просто CheckBoxPreference:
<org.yourpackage.MyCheckBoxPreference
android:title="@string/preference_title_activate"
android:defaultValue="false"
android:summary="@string/preference_summary_activate_off"
android:summaryOff="@string/preference_summary_activate_off"
android:key="preference_activate">
</org.yourpackage.MyCheckBoxPreference>
MyCheckBoxPreference необходимо создать один раз перед получением сводного цвета с помощью MyCheckBoxPreference.getSummaryColor ().
Теперь вы можете установить цвет других пользовательских настроек из onBindView (View):
public class MyCustmizedPreference extends Preference {
public MyCustmizedPreference (Context context) {
super(context);
setLayoutResource(R.layout.my_customized_preference);
}
@Override
public void onBindView(View view) {
super.onBindView(view);
TextView summaryView = (TextView) view.findViewById(android.R.id.summary);
if (summaryView != null) {
summaryView.setTextColor(MyCheckBoxPreference.getSummaryColor());
}
}
}
Это на самом деле работает под Samsung Galaxy S. Я также проверял, что он ничего не нарушаетпод эмулятором.