gregkorossy / Android-Support-Preference-V7-Fix

Android androidx.preference support library has some issues, this lib tries to fix them.
https://discord.gg/87NVsSK
Apache License 2.0
497 stars 46 forks source link

How to style dialog from DialogPreference #52

Closed tylerwilson closed 7 years ago

tylerwilson commented 7 years ago

I apologize if this is not directly related to Preference-V7-Fix - though perhaps it is something it could assist with in the future.

I have been trying to style the popup dialogs from ListPreference, but nothing is working. I have tried overriding dialogPreferenceStyle, alertDialogStyle, etc. but it is always ignored. (I changed my main preferences to use a dark background and white text, which then causes many of the text and controls in the dialogs to be white and white and thus invisible).

Is there an global dialog style in the Fix lib that might help be accomplish this?

gxcare commented 7 years ago

I lost a lot of time trying to figure how to implement this and at the result is quite simple, if you just want all the dialogs to have the same style.

Set a theme like this to the activity implementing the preferences:

`

<!-- Accent color for preferences activity ........... -->
<color name="preference_accent">@color/app_accent</color>

<!-- App theme for preferences activity ........... -->
<style name="AppThemePreferences" parent="@style/PreferenceFixTheme">
    <item name="colorPrimary">@color/app_primary</item>
    <item name="colorPrimaryDark">@color/app_primary_dark</item>
    <item name="colorAccent">@color/app_accent</item>
    <item name="android:windowBackground">@color/app_background</item>
    <item name="actionModeBackground">@color/app_action_mode_background</item>
    <item name="colorControlHighlight">@color/app_control_highlight</item>
    <item name="colorControlActivated">@color/app_control_activated</item>
    <!-- AppCompat Dialog Attributes -->
    <item name="dialogTheme">@style/AppCompatDialog</item>
    <item name="alertDialogTheme">@style/AppCompatAlert</item>
</style>

<!-- Generic Dialog Theme -->
<style name="AppCompatDialog" parent="Theme.AppCompat.Dialog">
    <!-- Used for the title and text -->
    <item name="android:textColorPrimary">@color/dialog_text</item>
    <!-- Used for the background -->
    <item name="android:background">@color/dialog_background</item>
    <!-- Used for the buttons -->
    <item name="colorAccent">@color/dialog_button</item>
    <item name="colorControlHighlight">@color/dialog_control_highlight</item>

    <item name="colorPrimary">@color/app_primary</item>
    <item name="colorPrimaryDark">@color/app_primary_dark</item>
</style>

<!-- Alert Dialog Theme -->
<style name="AppCompatAlert" parent="Theme.AppCompat.Dialog.Alert">
    <item name="android:textColorPrimary">@color/dialog_text</item>
    <!-- Used for the background -->
    <item name="android:background">@color/dialog_background</item>
    <!-- Used for the buttons -->
    <item name="colorAccent">@color/dialog_button</item>
    <item name="colorControlHighlight">@color/dialog_control_highlight</item>

    <item name="colorPrimary">@color/app_primary</item>
    <item name="colorPrimaryDark">@color/app_primary_dark</item>
</style>

`

Take the above code as an example as I took it directly from my app, but it is working properly for me.

gregkorossy commented 7 years ago

What @giccisw writes is the standard way of overriding AlertDialog styles. It was part of the lib as the AlertDialog wouldn't use the accent color from the main theme, but has been removed since in v24.2.0.0 because the Android team fixed this behavior.

tylerwilson commented 7 years ago

So to be clear @Gericop: I should be able to set the background of the displayed AlertDialog that is displayed from any DialogPreference-derived Preference? Because I have not been able to effect any changes to the dialogs. I will be trying to tweak my existing style to match what @giccisw has above (I thought mine was pretty much the same, but it could be one character off I suppose).

tylerwilson commented 7 years ago

Okay, I got it working. Thank you both so much. I was using "android:alertDialogTheme" instead of the plain "alertDialogTheme". Frustrating. I also was not using the PreferenceFixTheme as a base for my Preference Theme which perhaps has an effect as well.

dynoChris commented 5 years ago

What is PreferenceFixTheme?