Lors de la mise à jour de mes applications vers KitKat, je voulais juste leur donner un look magnifique sur KitKat en utilisant la propriété Translucent:
Barres système translucides
Vous pouvez désormais rendre les barres système partiellement translucides avec de nouveaux thèmes, Theme.Holo.NoActionBar.TranslucentDecor et Theme.Holo.Light.NoActionBar.TranslucentDecor. En activant les barres système translucides, votre disposition remplira la zone derrière les barres système, vous devez donc également activer [fitSystemWindows] [4] pour la partie de votre disposition qui ne doit pas être couverte par les barres système.
Ma seule préoccupation est que je voudrais utiliser un ActionBar qui sonne à l'opposé de ce que Google veut (les deux thèmes ont NoActionBar:
Theme.Holo.NoActionBar.TranslucentDecor
Theme.Holo.Light.NoActionBar.TranslucentDecor
Comme je ne prévois pas d'utiliser des astuces ou des astuces pour le faire fonctionner, je voulais juste savoir s'il y avait un moyen correct d'y parvenir ou si cela serait contraire aux directives de Google.
Vous pouvez créer votre propre thème avec Android.R.attr#windowTranslucentStatus
réglé sur true
pour obtenir le même effet sans perdre le ActionBar
.
À partir des documents:
Drapeau indiquant si cette fenêtre demande une barre d'état translucide. Correspond à {@link Android.view.WindowManager.LayoutParams # FLAG_TRANSLUCENT_STATUS}.
Styles - Rappelez-vous, ceux-ci iraient dans values-v19
.
<style name="TranslucentStatusBar" parent="@Android:style/Theme.Holo.Light">
<item name="Android:actionBarStyle">@style/TranslucentActionBar</item>
<item name="Android:windowTranslucentNavigation">false</item>
<item name="Android:windowTranslucentStatus">true</item>
<item name="Android:windowContentOverlay">@null</item>
</style>
<style name="TranslucentActionBar" parent="@Android:style/Widget.Holo.Light.ActionBar">
<item name="Android:background">@Android:color/transparent</item>
</style>
Disposition
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@Android:color/holo_blue_dark"
Android:fitsSystemWindows="true" >
<FrameLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@Android:color/holo_purple" />
</FrameLayout>
Résultats
Cela fonctionne avec moins de lignes:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KitKat) {
Window w = getWindow(); // in Activity's onCreate() for instance
w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
Ce serait génial si quelqu'un pouvait ajouter, comment vérifier, si la navigation translucide est disponible, parce que le N10, par exemple aura la navigation translucide désactivée avec Build.VERSION_CODES.KitKat. Edit: répondu à cette question: Vérifiez si la navigation translucide est disponible
Le code ci-dessous fonctionne bien dans mon application.
Translucide:
Window w = getWindow();
w.setFlags(
WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION,
WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
w.setFlags(
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
Réglage non translucide:
final WindowManager.LayoutParams attrs = getWindow()
.getAttributes();
attrs.flags &= (~WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
attrs.flags &= (~WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().setAttributes(attrs);
getWindow().clearFlags(
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
C'est la réponse que je cherchais: https://github.com/jgilfelt/SystemBarTint
Android 4.4 (KitKat) a introduit un style d'interface utilisateur système translucide pour les barres d'état et de navigation. Ces styles sont parfaits pour les activités basées sur le papier peint comme le lanceur d'écran d'accueil, mais la protection minimale de l'arrière-plan fournie les rend moins utiles pour d'autres types d'activité, sauf si vous fournissez vos propres arrière-plans dans votre mise en page. La détermination de la taille, de la position et de l'existence de l'interface utilisateur du système pour une configuration de périphérique donnée peut être non triviale.
Cette bibliothèque offre un moyen simple de créer une "teinte" d'arrière-plan pour les barres système, que ce soit une valeur de couleur ou Drawable. Par défaut, il vous donnera un fond noir semi-opaque qui sera utile pour les écrans de contenu à fond perdu où l'interface utilisateur système persistante est toujours importante - comme lorsqu'il est placé sur une carte ou une grille de photos.
Toutes les réponses étendent l'ActionBar soit par programme, soit à partir de la mise en page: ce qui signifie que lorsque l'application est lancée ou recréée, le système recherchera le thème (qui n'est pas au courant du correctif) et affichera une barre d'état TRÈS UGLY colorée avec quel que soit l'arrière-plan de la fenêtre ...!
J'ai créé un exemple de la façon de le faire en utilisant le thème uniquement :
J'espère que ce sera utile pour quelqu'un :)