ho trovato un modo per recuperare il colore predefinito utilizzato dal dispositivo Android l'applicazione è in esecuzione in. E 'un po' complicato e requieres che si recupera l'essere di colore mostrato da un'altra vista sommaria delle preferenze della tua attività e memorizzarla in runtime.
Quindi è possibile utilizzare lo stesso codice colore in altre visualizzazioni di altre preferenze, assicurando che verrà sempre assegnato lo stesso codice colore Android assegnato alle preferenze standard. Ecco come l'ho fatto:
L'attività delle mie preferenze ha un CheckBoxPreference normale che utilizzo per attivare o disattivare un servizio. Ho esteso CheckBoxPreference come segue, così la mia estensione recupera in Runtime il colore predefinito di Android ha dato finalmente alla sintesi di quel 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;
}
}
Nel mio preferences.xml ho un'istanza di che la preferenza come MyCheckBoxPreference invece di 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 deve essere istanziato una volta prima di recuperare il colore di riepilogo con MyCheckBoxPreference.getSummaryColor().
Ora è possibile impostare il colore di altre preferenze personalizzate da onBindView (Visualizza):
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());
}
}
}
Funziona in realtà sotto Samsung Galaxy S. Ho anche provato che non si rompe nulla sotto l'emulatore.
Le risorse colore sono corrette? : http://developer.android.com/guide/topics/resources/providing-resources.html – ykatchou
Abbiamo provato a impostare il colore del testo su android.R.color.white; per esempio ma diventa nero. – Jason
Hai provato qualcos'altro oltre ad una risorsa android.R.color. Sarebbe stupido, ma i produttori possono cambiare questi valori ... e questo avrebbe ripercussioni su tutte le app installate sul dispositivo. Prova magari un valore personalizzato come #fff. – grattemedi