he descubierto una manera de recuperar el color predeterminado utilizado por el dispositivo Android se ejecuta la aplicación. Es un poco complicado y requieres que recupera el ser de color se muestra desde otra vista de resumen de preferencias de su actividad y la almacena en tiempo de ejecución.
Luego puede usar el mismo código de color en otras Vistas de otras preferencias, asegurando que siempre obtendrá el mismo código de color Android asignado a las preferencias estándar. Así es como lo hice:
Mi actividad de preferencias tiene una CheckBoxPreference normal que utilizo para activar o desactivar un servicio. He ampliado CheckBoxPreference de la siguiente manera, por lo que mi extensión recupera en rutime el color por defecto de Android finalmente dio al resumen de ese 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;
}
}
En mi preferences.xml que crear una instancia de esa preferencia como MyCheckBoxPreference en lugar de sólo 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>
El MyCheckBoxPreference tiene que crearse una instancia antes de recuperar el color de resumen con MyCheckBoxPreference.getSummaryColor().
Ahora puede establecer el color de otras preferencias personalizadas de onBindView (Ver):
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());
}
}
}
En realidad funciona bajo el Samsung Galaxy S. También he probado que no se rompe nada bajo el emulador.
¿Los recursos de color están bien? : http://developer.android.com/guide/topics/resources/providing-resources.html – ykatchou
Hemos intentado establecer el color del texto en android.R.color.white; por ejemplo, pero se pone negro. – Jason
¿Has probado algo más aparte de un recurso android.R.color? Esto sería estúpido, pero los fabricantes pueden cambiar esos valores ... y afectaría a todas las aplicaciones instaladas en el dispositivo. Intente tal vez un valor personalizado como #fff. – grattemedi