如何更改支持包的首选项对话框颜色?

时间:2017-05-28 18:09:12

标签: android android-preferences android-theme

我可以在没有支持包的情况下自定义首选项的对话框主题。由于我切换到支持包(我的偏好片段现在扩展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/之外,我怎么知道它是什么?

如何调整主题?这个简单的任务可能太复杂了!

另外请解释路径的确切内容&#34;我想将首选项对话框的背景颜色设置为黑色&#34;我必须在XML中设置的确切属性。我在哪里可以找到:1。这是哪个对话框,2。它有什么属性3.设置这些属性有什么影响。 (最好不必深入挖掘源代码)。

文档告诉您查看来源,例如在R.attr中,但搜索包含&#34;对话框&#34;的名称除外或者&#34;偏好&#34;我不知道该怎么做。到目前为止,我尝试的所有属性都没有帮助。

相关:没有人使用(或重新设计)PreferenceFragmentCompat吗?难以找到关于此的信息,似乎也没有人知道。你用的是什么? (这些问题仅供评论)。

1 个答案:

答案 0 :(得分:1)

我发现了问题:

我正在使用

<p id="mybluewords">
Yo 
</p>

它应该是

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

非常恼人,特别是Android Studio无法捕获这些错误,甚至自动填充<item name="alertDialogTheme">@style/DialogStyle</item>