CoordinatorLayout pas de dessin derrière la barre de statut, même avec windowTranslucentStatus et fitsSystemWindows
Je suis en train de dessiner les vues de derrière la barre d'état comme ceci:
J'ai essayé de produire cet effet avec les techniques recommandées, mais j'obtiens ceci:
Il est clair à partir de la capture d'écran qu'aucun de mes contenu de l'application est en cours d'élaboration derrière la barre d'état.
Ce qui est intéressant, c'est que quelque part, la valeur liquidative de Tiroir parvient à attirer derrière la barre d'état:
Des trucs que j'ai fait:
- Utiliser la bibliothèque de prise en charge des widgets -
CoordinatorLayout
,AppBarLayout
,Toolbar
,DrawerLayout
windowTranslucentStatus
ensemble detrue
dans mon appli thèmefitsSystemWindows
ensemble detrue
sur monCoordinatorLayout
C'est mon app thème:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@android:color/transparent</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowTranslucentStatus">true</item>
</style>
C'est mon activité mise en page:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<FrameLayout android:id="@+id/page_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"/>
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />
</android.support.v4.widget.DrawerLayout>
La FrameLayout dans mon activité de mise en page est remplacé par ce fragment de mise en page:
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".MainActivity">
<FrameLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:background="@android:color/holo_blue_bright"
tools:context=".MainActivity">
<TextView android:text="@string/lorem_ipsum"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</FrameLayout>
<android.support.design.widget.AppBarLayout
android:layout_height="wrap_content"
android:layout_width="match_parent"
app:elevation="0dp"
android:theme="@style/AppTheme.TransparentAppBar">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@android:color/transparent"
app:title="@string/hello_blank_fragment"
app:popupTheme="@style/AppTheme.OverflowMenu" />
</android.support.design.widget.AppBarLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
- Essayez de définir fitsSystemWindows="false" dans le tiroir de mise en page.
- Je l'ai essayé et ça ne semble pas changer quoi que ce soit
- J'ai eu un problème similaire, essayez ceci: stackoverflow.com/questions/34761671/...
- voir cette réponse: stackoverflow.com/a/47906087/2201814
InformationsquelleAutor Joshua | 2015-11-12
Vous devez vous connecter pour publier un commentaire.
modifier pour les futurs lecteurs: il y a beaucoup de bonnes informations sur le sujet et la question sur les commentaires aussi, assurez-vous de lire à travers eux.
réponse originale à cette question:
Votre thème est le mal, c'est pourquoi.
Malheureusement, il y a des différences sur la façon de l'activer dans Kitkat ou Lollipop. Sur mon code, je l'ai fait en Java, mais vous pouvez également l'obtenir en XML si vous voulez jouer avec la
V21
dossiers sur vos ressources de l'arbre. Le nom des paramètres est très similaire à la Java homologues.Supprimer la
android:windowTranslucentStatus
de votre XML et Java utiliser comme ça:vous pouvez ensuite appeler à partir de votre activité
setTranslucentStatusBar(getWindow());
edit:
prise de la barre d'état translucide et le dessin derrière elle (pour une raison que je ne comprends pas) sont deux tâches distinctes dans Android.
J'ai regardé de plus sur mon code et je suis sûr BEAUCOUP plus de
android:fitsSystemWindows="true"
sur ma mise en page que juste leCoordinatorLayout
.ci-dessous sont tous les points de Vue sur ma mise en page avec
android:fitsSystemWindows="true"
sur eux:donc, ma suggestion est de tester/essayer de remplir
android:fitsSystemWindows="true"
sur votre XML.CoordinatorLayout
de remplir la zone derrière la barre d'état. Maintenant, il ressemble à ceci: i.imgur.com/koMgcm0.png?1fitsSystemWindows
à tout ce qui n'a pas fonctionné. J'ai même essayé d'ajouter un CollapsingToolbarLayout avec une ImageView à mon fragment de mise en page avecfitsSystemWindows
, mais cela ne fonctionne pas non plus. Sérieusement, merci pour votre aide bien. Je pense que je vais essayer quelques solutions peu orthodoxes.fitSystemWindows
. Je suis à la recherche de vos mises en page, je suppose que vous devez supprimer de votre activité de mise en page. Je veux dire, le retirer de laDrawerLayout
,NavigationView
etFrameLayout
. Je suppose que u seulement ajouter de latrue
pour les choses qui ne devraient pas être derrière tout ça (par exemple, vous avez un "titre" vue) mais le truc qui devrait être derrière il ne devrait pas avoirfitSystemWindows
DrawerLayout
etNavigationView
besoinfitsSystemWindows
parce qu'ils sont censé être tiré derrière la barre d'état trop (selon la Conception de Matériel spec). LeFrameLayout
contient en fait mon contenu (il est remplacé par le fragment de mise en page) donc il a besoin defitsSystemWindows
trop. Je commence à penser qu'il ne fonctionne pas parce que je suis à l'aide de fragments...fitSystemWindows
developer.android.com/reference/android/view/... . Lui donner un essai.fitsSystemWindows
. Il ne développe pas une vue de "s'adapter au système de la fenêtre", il demande en fait que le point de vue d'éviter les décorations de fenêtre comme la barre d'état. J'ai résolu le problème en supprimantfitsSystemWindows
de tout. RéglagewindowsTranslucentStatus
àtrue
dans mon appli thème est suffisant pour atteindre mon effet désiré;fitsSystemWindows
fait interfère avec qui.window:statusBarColor
etwindow:flags
fitsystemwindows = true
de coordonnateur mise en page et de faire de la barre de défilement vers le haut en donnant votreviewpager appbar_scrolling_view_behavior
, alors si la statusbarcolor est de transparence de la barre d'outils d'aller derrière la barre d'état, mais depuis la barre d'état est de transparence de la barre d'outils seront visibles dans la barre d'état, de sorte que vous besoin de donner le fitssystemwindows=true à la propriété à un parent d'un coordonnateur de mise en pageC'était vraiment déroutant pour moi, mais j'ai finalement pensé à elle pour ma combinaison de points de vue qui ressemble à ceci:
J'ai aussi utilisé les méthodes posté par Budius dans mon application pour obtenir la transparence de la barre d'état de travail:
Supprimer le android:windowTranslucentStatus de votre XML et Java utiliser comme ça:
styles.xml(v21)
Alors Si vous voulez changer statubarcolor, vous devez supprimer TRANSLUENT_FLAG comme ce
Si je veux la Barre d'état être transluent et simultanieousy kepping vue loin de se faufiler derrière la Barre d'état que j'utilise la plupart de la vue parente FrameLayout avec l'argument
Mon styles.xml(v21) ressembler
Et styles.xml
Peut-être le point clé ici est de s'assurer que vous utilisez AppCompactActivity ainsi que vous utilisez Thème.AppCompact en tant que root pour vos styles.