Question Écran noir dans la préférence intérieure Écran


ma PreferenceActivity contient un imbriqué PreferenceScreen en autre PreferenceScreen et j'applique un thème à mon PrefenceActivity cela change la couleur de fond. Cependant quand j'ouvre le nested PreferenceScreen J'ai un fond noir et je ne peux pas voir les options.

Cela se produit avec Android 2.1, mais cela ne se produit pas avec Android 1.6. Des idées sur la façon dont cela peut être corrigé?


10
2017-07-02 10:21


origine


Réponses:


J'ai trouvé un moyen de le faire, mais c'est tout un hack.

C'est mon 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>

Et ceci est mon code pour la classe qui 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;
        }
    });
}

13
2017-07-11 16:01



Qu'est-ce qui a fonctionné pour moi: définissez simplement un style de liste:

<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>

4
2018-04-17 12:23



Solution de contournement:

1) Préparez 2 xml PreScreenScreen au lieu de sub PreScreenScreen en utilisant;

2) Ajoutez une activité PreferenceScreen secondaire à 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) Pour afficher l’écran PreferenceScreen secondaire dans votre premier écran PreferenceScreen:

<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>

Exemple


3
2018-04-23 18:22



Macarsela réponse est parfaite, Je cherchais un fond blanc classique alors j'ai changé cette ligne dans sa réponse:

a.getDialog().getWindow().setBackgroundDrawableResource(R.drawable.background);

à:

a.getDialog().getWindow().setBackgroundDrawableResource(android.R.color.white);

et ça marche bien.


0
2017-12-15 11:42