Черный экран во внутреннем предпочтении. Экран
My PreferenceActivity
содержит вложенный PreferenceScreen
в другой PreferenceScreen
, и я применяю тему к моей PrefenceActivity
, которая меняет цвет фона. Однако, когда я открываю вложенный PreferenceScreen
, я получаю черный фон, и я не вижу этих параметров.
Это происходит с Android 2.1, но этого не происходит с android 1.6.
Любые идеи о том, как это можно исправить?
Ответы
Ответ 1
Я нашел способ сделать это, но это довольно хак.
Это мой prefs.xml
<PreferenceCategory
android:title="@string/hello">
<CheckBoxPreference
key="pref_update_key"
android:title="@string/hello"
android:summaryOn="@string/hello"
android:summaryOff="@string/hello"
android:persistent="true"
android:defaultValue="false" />
</PreferenceCategory>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:key="pref_second_preferencescreen_key" android:title="@string/hello">
<CheckBoxPreference
key="pref_update_key"
android:title="@string/hello"
android:summaryOn="@string/hello"
android:summaryOff="@string/hello"
android:persistent="true"
android:defaultValue="false" />
</PreferenceScreen>
И это мой код для класса, который extends PreferenceActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.layout.prefs);
getWindow().setBackgroundDrawableResource(R.drawable.background);
PreferenceScreen b = (PreferenceScreen) findPreference("pref_second_preferencescreen_key");
b.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
PreferenceScreen a = (PreferenceScreen) preference;
a.getDialog().getWindow().setBackgroundDrawableResource(R.drawable.background);
return false;
}
});
}
Ответ 2
Что сработало для меня: просто установите стиль списка:
<style name="Theme.Preferences" parent="android:Theme.Light" >
<item name="android:listViewStyle">@style/lightListView</item>
</style>
<style name="lightListView">
<item name="android:background">#ffffff<item>
</style>
Ответ 3
Обход проблемы:
1) Подготовьте 2 PreferenceScreen xml вместо sub PreferenceScreen, используя
2) Добавьте дополнительную активность PreferenceScreen в AndroidManifest.xml:
<activity android:name="com.example.PreferenceActivity2"
android:label="Issue4611"
android:theme="@android:style/Theme.Light">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
3) Для отображения вторичного экрана предпочтений в вашем первом экране предпочтений:
<PreferenceScreen android:key="key1"
android:title="1 Item"
android:summary="">
<intent android:action="android.intent.action.VIEW"
android:targetPackage="com.example"
android:targetClass="com.example.PreferenceActivity2"/>
</PreferenceScreen>
Пример
Ответ 4
Макаровый ответ прекрасен,
Я искал классический белый фон, поэтому я изменил эту строку в своем ответе:
a.getDialog().getWindow().setBackgroundDrawableResource(R.drawable.background);
в
a.getDialog().getWindow().setBackgroundDrawableResource(android.R.color.white);
и он работает хорошо.