Чтобы лучше понять, что здесь происходит, вы можете обратиться к этому коду из исходного кода для класса PreferenceScreen:
@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();
}
Способ, которым я работаю, заключается в том, чтобы установить родительский цвет фона, переопределив onCreateView в первом предпочтении, добавленном на экран предпочтений. Конечно, это требует некоторого пользовательского кода, но это не очень сложно, например, установить белый фон:
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);
}
}
Тогда вам, конечно, нужно будет использовать эту пользовательскую категорию, изменив свой xml, т.е.
<PreferenceScreen android:title="main preferences">
<PreferenceScreen android:title="sub screen">
<com.justinbuser.livewallpapers.VideoChooserPreferenceCategory android:title="sub screen category" />
</PreferenceScreen>
</PreferenceScreen>
Кроме того, если вы заметили, что android PreferenceScreen меняет тему в зависимости от того, установлен заголовок или нет, то есть, если заголовок существует, он активирует тему, включающую строку заголовка. Поэтому, если вы не хотите использовать строку заголовка, вам следует избегать установки заголовка на экране настроек и устанавливать его статически в xml или динамически через код.