J'ai cherché dans la documentation mais je n'ai trouvé que ceci: Lien . Lequel est utilisé pour rendre la barre translucide ? Ce que j'essaie de faire, c'est de rendre la barre d'état complètement transparente (comme indiqué dans l'image ci-dessous) et de la rendre rétrocompatible pour APK <19:
Mon styles.xml:
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="android:actionBarStyle">@style/ThemeActionBar</item>
<item name="android:windowActionBarOverlay">true</item>
<!-- Support library compatibility -->
<item name="actionBarStyle">@style/ThemeActionBar</item>
<item name="windowActionBarOverlay">true</item>
</style>
<style name="ThemeActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid">
<item name="android:background"> @null </item>
<!-- Support library compatibility -->
<item name="background">@null</item>
<item name="android:displayOptions"> showHome | useLogo</item>
<item name="displayOptions">showHome|useLogo</item>
</style>
</resources>
Ce que j'ai pu faire:
android:fitsSystemWindows="true"
à mon activity_main.xml. Les barres du système sont translucides et non transparentes.<item name="android:statusBarColor">@android:color/transparent</item>
à votre thème :)android:windowTranslucentStatus
sur false et cela a rendu la barre d'état transparente. Maintenant, j'ai fait la même chose avec la barre de navigation et ajouté<item name="android:navigationBarColor">@android:color/transparent</item>
mais cela rend les deux barres grises. POUAH!w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
placeAjoutez simplement cette ligne de code à votre fichier java principal:
la source
Vous pouvez utiliser la bibliothèque externe StatusBarUtil :
Ajoutez à votre niveau de module
build.gradle
:Ensuite, vous pouvez utiliser l'utilitaire suivant pour une activité afin de rendre la barre d'état transparente:
Exemple:
la source
Fonctionne pour Android KitKat et supérieur (Pour ceux qui veulent rendre transparente la barre d'état et ne pas manipuler la barre de navigation, car toutes ces réponses rendront également la barre de navigation transparente!)
Le moyen le plus simple d'y parvenir:
Mettez ces 3 lignes de code dans le
styles.xml (v19)
-> si vous ne savez pas comment avoir ceci (v19), écrivez-les simplement dans votre valeur par défautstyles.xml
, puis utilisez alt+ enterpour le créer automatiquement:Et maintenant, accédez à votre
MainActivity
classe et mettez cette méthode hors de onCreate dans la classe:Ensuite, mettez ce code dans la
onCreate
méthode de l'activité:C'est tout!
la source
StatusBar et NavigationBar complètement transparents
la source
Pour dessiner votre mise en page sous la barre d'état:
values / styles.xml
valeurs-v21 / styles.xml
Utilisez CoordinatorLayout / DrawerLayout qui prend déjà en charge le paramètre fitsSystemWindows ou créez votre propre mise en page pour aimer ceci:
main_activity.xml
Résultat:
Capture d'écran:
la source
Vous pouvez utiliser le code ci-dessous pour rendre la barre d'état transparente. Voir les images avec une surbrillance rouge qui vous aide à identifier l'utilisation du code ci-dessous
Extrait de code Kotlin pour votre application Android
Étape: 1 Notez le code dans la méthode Lors de la création
Étape 2: Vous avez besoin de la méthode SetWindowFlag qui décrit dans le code ci-dessous.
Extrait de code Java pour votre application Android:
Étape 1: Code d'activité principal
Étape 2: méthode SetWindowFlag
la source
Utilisez
android:fitsSystemWindows="false"
dans votre mise en page supérieurela source
Voici une extension dans kotlin qui fait l'affaire:
la source
En utilisant ce code dans votre XML, vous pourrez voir la barre de temps dans votre activité:
la source
IL Y A TROIS ÉTAPES:
1) Utilisez simplement ce segment de code dans votre méthode @OnCreate
si vous travaillez sur Fragment, vous devez mettre ce segment de code dans la méthode @OnCreate de votre activité.
2) Assurez-vous de définir également la transparence dans /res/values-v21/styles.xml:
Ou vous pouvez définir la transparence par programme:
3) De toute façon, vous devez ajouter le segment de code dans styles.xml
REMARQUE: cette méthode fonctionne uniquement sur l'API 21 et au-dessus.
la source
Vous pouvez également voir mon exemple avec un avatar animé et un texte animé
RéduireAvatarToolbarSample
Lire mon article sur Medium
Alors permettez-moi d'expliquer comment cela fonctionne. J'ai créé une vue personnalisée implémentée AppBarLayout.OnOffsetChangedListener . Dans la vue personnalisée HeadCollapsing, j'ai fondé la vue texte et image dans AppBarLayout.
la source
Vous pouvez essayer ça.
la source
Alors que toutes les réponses ci-dessus circulent autour de la même idée fondamentale et que vous pouvez la faire fonctionner avec des mises en page simples en utilisant l'un des exemples ci-dessus. Cependant, je voulais changer la couleur de l'arrière-plan tout en utilisant la navigation par fragment glissant `` plein écran '' (barre d'onglets à part) et maintenir une navigation régulière, des barres d'onglets et d'actions.
Après avoir lu attentivement un article d'Anton Hadutski, j'ai mieux compris ce qui se passe.
J'ai
DrawerLayout
avecConstraintLayout
(ie conteneur) qui aToolbar
, inclure pour le fragment principal etBottomNavigationView
.Réglage
DrawerLayout
ayantfitsSystemWindows
true ne suffit pas, vous devez définir à la foisDrawerLayout
etConstraintLayout
. En supposant que la barre d'état soit transparente, la couleur de la barre d'état est maintenant la même que la couleur d'arrière-plan deConstraintLayout
.Cependant, le fragment inclus a toujours l'encart de la barre d'état, donc animer un autre fragment `` plein écran '' au-dessus de ne change pas la couleur de la barre d'état.
Un peu de code de l'article référencé dans
Activity
'sonCreate
:Et tout va bien, sauf que maintenant, le
Toolbar
ne traite pas de la hauteur de la barre d'état. Un peu plus faisant référence à l'article et nous avons une solution entièrement fonctionnelle:Le main_activity.xml (veuillez noter que marginTop in
Toolbar
est à des fins de prévisualisation, il sera remplacé par le code):la source
J'ai trouvé que jouer avec styles.xml et l'activité était trop fastidieux, j'ai donc créé une méthode d'utilité commune qui comprend les options ci-dessous.
Java
Kotlin DSL
Et c'est tout ce qu'il a fallu pour obtenir une barre d'état transparente. J'espère que cela t'aides.
la source
android:fitsSystemWindows="true"
ne fonctionne que sur v21. Nous pouvons le définir dans le thème xml ou dans la mise en page parent commeLinearLayout
ou dansCoordinateLayout
. Pour les versions ci-dessous v21, nous n'avons pas pu ajouter cet indicateur. Veuillez créer un dossier de valeurs différentes avec unstyle.xml
fichier différent selon vos besoins.la source
Cela a fonctionné pour moi:
la source
Tout ce dont on a besoin est d'entrer
MainActivity.java
la source
dans mon cas, comme j'ai une barre d'outils en bas, j'ai eu un problème lors du test des solutions précédentes, les boutons du système Android sont couverts par mon menu du bas, ma solution est d'ajouter dans l'activité:
la source
Vous pouvez utiliser ce code ci-dessous.
Incluez cette mise en page dans votre mise en page principale.
toolbar.xml
Remarque: vous pouvez remplacer SDP et SSP par dp et sp respectivement.
la source
dans mon cas, je n'appelle pas du tout "onCreate" (c'est une application native de réaction et cela peut être corrigé également en utilisant le composant StatusBar natif de réaction), on peut également utiliser ceci:
la source
Cela devrait fonctionner
// Dans onCreate () d'Activity par exemple
la source
J'ai trouvé la réponse en étudiant cette bibliothèque: https://github.com/laobie/StatusBarUtil
vous devez donc ajouter les codes suivants à votre activité
la source
ajoutez ces lignes dans votre activité avant le setContentView ()
ajoutez ces 2 lignes dans votre AppTheme
et dernière chose que votre minSdkVersion doit b 19
la source
Ne pas
windowLightStatusBar
utiliser à la placestatusBarColor = @android:color/transparent
la source
Ceci est uniquement pour le niveau API> = 21. Cela fonctionne pour moi. Voici mon code (Kotlin)
la source