web-dev-qa-db-fra.com

Android v21 Theme.Appcompat l'accent de couleur est ignoré, aucun remplissage dans les boîtes de dialogue

J'utilise ActionBarActivity à partir du Android 5 SDK et voici mon theme.xml pour v21

<style name="AppTheme_Light" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="Android:colorPrimary">@color/abc1</item>
    <item name="Android:colorPrimaryDark">@color/abc2</item>
    <item name="Android:colorAccent">@color/abc3</item>
</style>

Mais les couleurs sont ignorées et sont remplacées par une couleur bleu sarcelle par défaut et tous les dialogues apparaissent sans remplissage.

Problème http://i62.tinypic.com/21cebcz.png

De plus, le remplissage est également ignoré à d'autres endroits, comme le pain grillé personnalisé. Ce problème ne se produit que sur les périphériques Lollipop.

Modifier:

Le problème de remplissage était dû à fitsSystemWindow et je l’ai résolu en utilisant
cette question. .

Mais le problème de couleur d'accent est toujours là, et il n'affecte pas que les dialogues mais toute l'application.

51
k1slay

A propos de la couleur d'accent. Vous utilisez un thème AppCompat, vous devez donc supprimer Android de l'espace de noms situé à l'intérieur de votre thème.

<style name="AppTheme_Light" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/abc1</item>
    <item name="colorPrimaryDark">@color/abc2</item>
    <item name="colorAccent">@color/abc3</item>
</style>

A propos du dialogue. AppCompat ne le supporte pas (comme je le sais).
Vous pouvez essayer d’utiliser ce style dans votre dossier values-v21:

<style name="Theme" parent="FrameworkRoot.Theme">
    <item name="Android:alertDialogTheme">@style/Theme.AlertDialog</item>
</style>

<style name="Theme.AlertDialog" parent="Android:Theme.Material.Light.Dialog.Alert">
    <item name="Android:colorPrimary">@color/demo_primary_color</item>
    <item name="Android:colorPrimaryDark">@color/demo_colorPrimaryDark</item>
    <item name="Android:colorAccent">@color/theme_accent_1</item>
</style>

UPDATE 23/04/2015: SUPPORT LIBRARY V.22.1

Le nouveau support library v22.1 fonctionne avec le dialogue. Vous pouvez utiliser un Android.support.v7.app.AlertDialog ou le nouveau AppCompatDialog .

Par exemple:

import Android.support.v7.app.AlertDialog

AlertDialog.Builder builder =
       new AlertDialog.Builder(this, R.style.AppCompatAlertDialogStyle);
            builder.setTitle("Dialog");
            builder.setMessage("Lorem ipsum dolor ....");
            builder.setPositiveButton("OK", null);
            builder.setNegativeButton("Cancel", null);
            builder.show();

Et utilisez un style comme celui-ci:

<style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorAccent">#FFCC00</item>
    <item name="Android:textColorPrimary">#FFFFFF</item>
    <item name="Android:background">#5fa3d0</item>
</style>

Sinon, vous pouvez définir dans votre thème actuel:

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- your style -->
    <item name="alertDialogTheme">@style/AppCompatAlertDialogStyle</item>
</style>

et ensuite dans votre code:

 import Android.support.v7.app.AlertDialog

    AlertDialog.Builder builder =
           new AlertDialog.Builder(this);
125
Gabriele Mariotti

mise à jour

J'ai appliqué avec succès des couleurs pour les thèmes de dialogues appCompat, peut-être utile pour quelqu'un:

valeurs/style.xml

<style name="Theme.MyApp" parent="Theme.AppCompat.Light">

...

/* for Android 4 - 4.4, we not define alert dialogs style */

</style>

values-v21/style.xml

<style name="Theme.MyApp" parent="Theme.AppCompat.Light">

...

/* define alert dialog style for Android 5 */
<item name="Android:alertDialogTheme">@style/Theme.AlertDialog</item>

</style>
 <style name="Theme.AlertDialog" parent="Theme.AppCompat.Light.Dialog">

    <!--app abar color in Activties Task manager -->
    <item name="colorPrimary">@color/my_color</item>

    <!--copy/paste colors -->
    <item name="colorAccent">@color/my_color</item>

    <!--status bar color -->
    <item name="colorPrimaryDark">@color/my_color</item>


</style>
22
Sergey Vakulenko

La version actuelle d'AppCompat n'applique pas la colorisation à AlertDialogs.

Essayez d'utiliser https://github.com/afollestad/material-dialogs , cela fonctionne très bien!

8
AlexKorovyansky