Para entender mejor lo que está sucediendo aquí se puede referir a este pedazo de código a partir del código fuente de la clase PREFERENCE:
@Override
protected void onClick() {
if (getIntent() != null || getPreferenceCount() == 0) {
return;
}
showDialog(null);
}
private void showDialog(Bundle state) {
Context context = getContext();
ListView listView = new ListView(context);
bind(listView);
// Set the title bar if title is available, else no title bar
final CharSequence title = getTitle();
Dialog dialog = mDialog = new Dialog(context, TextUtils.isEmpty(title)
? com.android.internal.R.style.Theme_NoTitleBar
: com.android.internal.R.style.Theme);
dialog.setContentView(listView);
if (!TextUtils.isEmpty(title)) {
dialog.setTitle(title);
}
dialog.setOnDismissListener(this);
if (state != null) {
dialog.onRestoreInstanceState(state);
}
// Add the screen to the list of preferences screens opened as dialogs
getPreferenceManager().addPreferencesScreen(dialog);
dialog.show();
}
La forma en que yo trabajo en torno a que es configurar el color de fondo principal anulando onCreateView en la primera preferencia agregada a la pantalla de preferencias. Por supuesto, esto requiere un poco de código personalizado pero no es terriblemente complicado, por ejemplo, para establecer un fondo blanco:
package com.justinbuser.livewallpapers;
import android.preference.PreferenceCategory;
public class VideoChooserPreferenceCategory extends PreferenceCategory{
public VideoChooserPreferenceCategory(Context context) {
super(context);
}
@Override
protected View onCreateView(ViewGroup parent)
{
parent.setBackgroundColor(0xFFFFFFFF);
return super.onCreateView(parent);
}
}
A continuación, por supuesto, necesita usar esa categoría personalizada mediante la alteración de su XML, es decir:
<PreferenceScreen android:title="main preferences">
<PreferenceScreen android:title="sub screen">
<com.justinbuser.livewallpapers.VideoChooserPreferenceCategory android:title="sub screen category" />
</PreferenceScreen>
</PreferenceScreen>
Además, si observa que la PreferenceScreen de Android cambia el tema en función de si se establece un título, es decir, si existe un título, habilita un tema que incluya la barra de título. Por lo tanto, si no desea una barra de título, debe evitar establecer el título de la pantalla de preferencias y configurarlo de forma estática en xml o dinámicamente a través del código.
¿Puedes mostrar una captura de pantalla de lo que parece antes de agregar la segunda PreferenceScreen y después? – CaseyB
Esta es mi pantalla principal de preferencias http://snapplr.com/fqxc, así que cuando hago clic en "Herinneringen" (holandés para notificaciones) me aparece este http://snapplr.com/gjzd (Y no hay una flecha al lado de Herinneringen, donde debería haber uno!) ¿Cuál es el problema aquí? – wouter88
¿Está cargando una nueva actividad o solo está inflando y superponiendo una vista? – CaseyB