更改 EditTextPreference 的对话框消息颜色

Change dialogMessage color of EditTextPreference

我有一个自定义偏好,它扩展了 EditTextPreference:

class DeleteAccountPreference(context: Context, attrs: AttributeSet) : EditTextPreference(context, attrs) {
    ...
}  

preferences.xml

<my.app.DeleteAccountPreference
    android:layout="@layout/preference_click"
    android:key="delete_account"
    android:title="Delete Account"
    android:dialogMessage="@string/delete_account_message" />

我已将自定义主题应用于:

styles.xml

<style name="BaseTheme" parent="Theme.AppCompat.NoActionBar">
    ...        
    <item name="alertDialogTheme">@style/AlertDialogTheme</item>
</style>

<style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:background">@color/colorIcons</item>
    <item name="colorPrimary">@color/colorLightBlack</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="colorPrimaryDark">@color/colorExit</item>
    <item name="editTextColor">@color/colorAccent</item>
    <item name="android:textColorHint">#000000</item>
    <item name="android:windowBackground">@color/colorPrimary</item>
</style>

然而,无论我向 AlertDialogTheme 添加什么项目,我似乎都无法更改下面显示的 dialogMessage 颜色(白色)。

知道 <item> 我需要添加什么来更改此颜色吗?

将以下项目添加到您的 AlertDialogStyle 中。

<item name="android:textColor">@color/colorPrimary</item>

您应该将 android:textColorSecondary 应用于 activity 的主题:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    ...
    <item name="android:textColorSecondary">#FF5722</item>
</style>

然后你会收到一条橙色的消息内容:

请注意,这将影响此 activity 中依赖于 textColorSecondary 属性的所有其他视图。我试图使此更改仅影响特定的偏好,不幸的是 PreferenceFragmentCompat 将忽略提供的 Context 并将使用 activity 的上下文,因此传递带有自定义的 ContextThemeWrapper主题不会生效。我想这是 Google 团队的一个有意识的决定,这意味着此首选项屏幕内的所有属性都应适应相同的配色方案。