2017-05-28 1 views
0

J'ai pu personnaliser le thème de la boîte de dialogue des préférences sans le package de support. Depuis que je suis passé au paquet de soutien (mon fragment de préférences s'étend maintenant PreferenceFragmentCompat au lieu de PreferencesFragment) Je ne suis pas en mesure de changer les couleurs.Comment modifier les couleurs de la boîte de dialogue des préférences du package de support?

Jusqu'à présent, je l'a ajouté à mon thème:

<item name="preferenceTheme"> 
    @style/MyPreferenceTheme 
</item> 
<item name="android:dialogTheme">@style/DialogStyle</item> 
<item name="android:alertDialogTheme">@style/DialogStyle</item> 
<item name="android:dialogPreferenceStyle">@style/DialogStyle</item> 

// ...

<style name="MyPreferenceTheme" parent="PreferenceThemeOverlay.v14.Material"> 
<!--<style name="MyPreferenceTheme">--> 
    <item name="colorAccent">@android:color/white</item> 
    <item name="android:background">@color/bg0</item> 
    <item name="android:textColor">@color/fg0</item> 

    <item name="android:windowBackground">@color/bg0</item> 
    <item name="android:windowTitleStyle">@style/WindowTitleStyle</item> 

    <item name="android:keyTextColor">@color/fg0</item> 
    <item name="android:textColorAlertDialogListItem">@color/fg0</item> 
    <item name="android:textColorPrimary">@color/fg0</item> 
    <item name="android:textColorSecondary">@color/fg0</item> 
    <item name="android:textColorTertiary">@color/fg0</item> 

    <item name="colorControlNormal">@color/fg0</item> 
    <item name="colorControlActivated">@color/fg0</item> 
    <item name="colorControlHighlight">@color/fg0</item> 
</style> 


<style name="DialogStyle" parent="Theme.AppCompat.Dialog"> 
    <item name="colorAccent">@android:color/white</item> 
    <item name="android:background">@color/bg0</item> 
    <item name="android:textColor">@color/fg0</item> 

    <item name="android:windowTitleStyle">@style/WindowTitleStyle</item> 
    <item name="android:windowBackground">@color/bg0</item> 

    <item name="android:keyTextColor">@color/fg0</item> 
    <item name="android:textColorAlertDialogListItem">@color/fg0</item> 
    <item name="android:textColorPrimary">@color/fg0</item> 
    <item name="android:textColorSecondary">@color/fg0</item> 
    <item name="android:textColorTertiary">@color/fg0</item> 

    <item name="colorControlNormal">@color/fg0</item> 
    <item name="colorControlActivated">@color/fg0</item> 
    <item name="colorControlHighlight">@color/fg0</item> 
</style> 

<style name="WindowTitleStyle" parent="TextAppearance.AppCompat.Title"> 
    <item name="android:textColor">@color/fg0</item> 
</style> 

Tout ce que je veux est un fond noir et texte blanc/widgets. fg0 est blanc et bg0 est noir. Mais le dialogue affiche un texte blanc et noir. Le titre est invisible (je suppose que c'est blanc, ce qui est correct). Dans un acte de désespoir, j'ai également essayé d'utiliser une mise en page personnalisée pour le dialogue, avec setDialogLayoutResource - Je voulais copier la ressource Android utilise pour la boîte de dialogue et il suffit de changer les couleurs. Mais je n'ai aucune idée d'où la ressource Android est. Dans le code source des préférences, il n'y a pas de référence explicite aux fichiers de mise en page, sauf que j'ai trouvé https://android.googlesource.com/platform/frameworks/support/+/master/v7/appcompat/res/layout/ et https://android.googlesource.com/platform/frameworks/support/+/master/v7/preference/res/layout/ mais comment savoir de quoi il s'agit?

Comment ajuster le thème? Cette tâche simple ne peut pas être si compliquée!

Veuillez également expliquer en quoi consiste exactement le chemin depuis "Je veux définir la couleur d'arrière-plan de la boîte de dialogue des préférences sur noir" avec les attributs exacts que je dois définir dans le fichier XML. Où puis-je trouver: 1. Quel est ce dialogue? 2. Quels attributs a-t-il? 3. Quels sont les effets de la définition de ces attributs? (De préférence sans avoir à creuser dans le code source).

Docs dit de regarder la source, par ex. dans R.attr mais à l'exception de la recherche de noms contenant "dialogue" ou "préférences" je ne sais pas quoi faire avec cela. Aucun des attributs que j'ai essayés jusqu'ici n'a aidé.

Relié: Est-ce que personne n'utilise (ou restyle) PreferenceFragmentCompat? Ayant des difficultés à trouver des informations à ce sujet et personne ne semble le savoir non plus. Qu'est-ce que vous utilisez à la place? (ces questions sont seulement pour les commentaires).

Répondre

0

Je trouve le problème:

J'utilisais

<item name="android:alertDialogTheme">@style/DialogStyle</item> 

et il aurait dû être

<item name="alertDialogTheme">@style/DialogStyle</item> 

Très irritant, en particulier que Android Studio ne capture pas ces erreurs et même autocomplète android:alertDialogTheme.