如何更改支持包的偏好对话框颜色?

问题描述:

我能够在没有支持包的情况下自定义首选项的对话框主题。由于我切换到支持包(我的偏好片段现在延伸PreferenceFragmentCompat而不是PreferencesFragment)我无法更改颜色。如何更改支持包的偏好对话框颜色?

到目前为止,我已将此添加到我的主题:

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

我要的是一个黑色的背景和白色文字/部件。 fg0是白色,bg0是黑色。但对话框显示白色的bg和黑色文本。标题是不可见的(我认为它是白色的,这是正确的)。

在绝望的行为中,我也尝试过使用对话框的自定义布局,setDialogLayoutResource - 我想复制Android用于对话框的资源并更改颜色。但我不知道Android资源的位置。在首选项的源代码中,没有明确提及布局文件,除此之外我发现了https://android.googlesource.com/platform/frameworks/support/+/master/v7/appcompat/res/layout/https://android.googlesource.com/platform/frameworks/support/+/master/v7/preference/res/layout/,但我怎么知道它是哪一个?

如何调整主题?这个简单的任务不能这么复杂!

也请解释什么路径是从“我想设置偏好对话框的背景颜色为黑色”到我必须在XML中设置的确切属性。我在哪里可以找到:1.哪个对话框是这样的,2.它具有哪些属性3.设置这些属性的效果是什么。 (最好不需要挖掘源代码)。

文档告诉我们看源代码,在R.attr但除了搜索名称包含“对话框”或“偏好”我不知道该怎么做。我迄今尝试过的所有属性都没有帮助。

相关:没有人使用(或恢复)PreferenceFragmentCompat?难以找到关于这方面的信息,而且似乎也没有人知道。你用什么来代替? (这些问题仅限于评论)。

我发现这个问题:

我用

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

,它应该是

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

很让人讨厌,特别是Android的Studio不捕获这些错误,甚至autocompletes android:alertDialogTheme