web-dev-qa-db-fra.com

Qu'est-il arrivé à windowContentOverlay dans Android API 18?

Après la mise à niveau de mon téléphone vers Android 4.3, j'ai remarqué que l'ombre sous la barre d'action ne s'affiche plus. Dans mon application, j'ai une ombre personnalisée en utilisant windowContentOverlay:

<item name="Android:windowContentOverlay">@drawable/shadows_bottom</item>

Cela a toujours été affiché, mais maintenant c'est parti pour l'API 18. Supprimer cette ligne du thème ne change rien. tandis que sur d'autres versions d'API, il présente une légère ombre par défaut.

Quelqu'un d'autre a remarqué ce problème?

28
Romain Piel

Ceci est officiellement un bug et sera corrigé pour la prochaine version de la plateforme: https://code.google.com/p/Android/issues/detail?id=5828

MISE À JOUR: Cela semble être corrigé au niveau de l'API 19

18
Romain Piel

J'ai pu contourner ce bogue de plate-forme en ajoutant la méthode suivante à ma base FragmentActivity et en l'appelant dans onCreate une fois la mise en page gonflée:

/**
 * Set the window content overlay on device's that don't respect the theme
 * attribute.
 */
private void setWindowContentOverlayCompat() {
    if (Build.VERSION.SDK_INT == Build.VERSION_CODES.JELLY_BEAN_MR2) {
        // Get the content view
        View contentView = findViewById(Android.R.id.content);

        // Make sure it's a valid instance of a FrameLayout
        if (contentView instanceof FrameLayout) {
            TypedValue tv = new TypedValue();

            // Get the windowContentOverlay value of the current theme
            if (getTheme().resolveAttribute(
                    Android.R.attr.windowContentOverlay, tv, true)) {

                // If it's a valid resource, set it as the foreground drawable
                // for the content view
                if (tv.resourceId != 0) {
                    ((FrameLayout) contentView).setForeground(
                            getResources().getDrawable(tv.resourceId));
                }
            }
        }
    }
}

Cela fonctionne bien car vous n'avez pas à modifier vos thèmes ni à ajouter dynamiquement des vues à vos mises en page. Il doit être compatible avec le futur et peut être facilement supprimé une fois ce bogue corrigé.

30
twaddington