À l'aide de windowTranslucentStatus avec CollapsingToolbarLayout
Je vais essayer d'obtenir un effet similaire à ce qui est vu sur google play.
J'ai eu la mise en page ci-dessous pour afficher une transparence de la barre d'outils avec une image derrière elle. Lorsque l'utilisateur fait défiler il y a un effet de parallaxe sur l'imageview comme il sort de l'écran. La barre d'outils retourne quand l'utilisateur fait défiler vers le haut, avec l'imageview renvoyant uniquement lorsque l'utilisateur arrive à la lop de la liste.
Tout cela fonctionne très bien.
<android.support.design.widget.CoordinatorLayout
android:id="@+id/main"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<android.support.design.widget.AppBarLayout
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:background="@color/background_material_dark">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsingToolbarLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minHeight="?attr/actionBarSize"
app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed"
app:statusBarScrim="#09b"
app:contentScrim="#09f">
<ImageView
android:id="@+id/img"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/location_banner"
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="0.7"
/>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_height="?attr/actionBarSize"
android:layout_width="match_parent"
app:layout_collapseMode="pin"
android:fitsSystemWindows="true"
app:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>
La question
Lorsque j'ai mis windowTranslucentStatus de vrai.
Le contenu de la vue se déplacer jusqu'à être sous la barre d'état, mais le contenu de la CollapsingToolbarLayout se déplace jusqu'à deux fois la hauteur de la barre d'état(CollapsingToolbarLayout conserve la bonne hauteur).
Cela signifie que certains des meilleurs de l'image est coupée, et l'actionbar apparaît maintenant dans la barre d'état plutôt qu'au-dessous. Comme un effet secondaire de cela, il est maintenant de remplissage au bas de la CollapsingToolbarLayout la même hauteur que la barre d'état
C'est à quoi il ressemble sans windowTranslucentStatus. Ici, tout fonctionne très bien
windowTranslucentStatus définie sur true
De l'utilisateur de faire défiler vers le haut du bas dans la liste (pas au top)
- comment avez-vous résolu ce problème. Malheureusement, j'obtiens cette erreur, pouvez-vous s'il vous plaît partagez-moi votre solution?
- Google briser ce à chaque fois qu'ils font une nouvelle version de la bibliothèque de prise en charge, mais vous pouvez trouver un autre hack chaque fois pour obtenir autour de lui (très frustrant). 23.1.1 est un bon pari pour avoir de travail sur ok. Plus de détails dans la deuxième dernier post ici code.google.com/p/android/issues/...
- oui, plus tôt(avec de vieux outils de construction), il a été fonctionne bien si je continue à fitsSystemWindows=true. Cependant, il a cassé dans la dernière version des outils. Après avoir lutté beaucoup, j'ai enlevé thefitsSystemWindows de racine mise en page et maintenant Il fonctionne comme prévu. Merci pour la réponse 🙂
- J'ai remarqué qu'un certain paddingTop a été ajoutée à ma RecyclerView lors de l'utilisation de fitSystemWindow. Finalement, j'ai mis en place un hack qui réinitialise le paddingTop à zéro manuellement personnalisé dans un recycleur. Maintenant, il fonctionne très bien. Pas la meilleure solution mais au moins ça fonctionne pour l'instant...
Vous devez vous connecter pour publier un commentaire.
Ajouter fitsSystemWindows à la présentation et à la valeur true.
Mise à jour
Désolé pour ma réponse incomplète.
Vous devez ajouter fitsSystemWindows="true" layout xml comme ci-dessous des codes.
fitsSystemWindows = true
ou quelque chose comme çaIl y a maintenant une mise à jour de la bibliothèque de conception. Je suppose que la question posté ci-dessus était un bug.
Si vous mettez à jour la bibliothèque de conception pour la version la plus récente de ce problème ne se produit plus.
J'ai maintenant supprimé tous les fitsSystemWindows="true" à l'exception de l'ImageView (ainsi que le besoin d'afficher en vertu de la barre d'état).
J'ai également supprimé les moins de rembourrage à partir de la Barre d'outils.
C'est mon thème 21+
Tout fonctionne comme prévu maintenant
Une fois la barre d'état est transparent et la libre utilisation par l'activité, la barre d'outils est poussé du haut d'occuper cet espace. Pour corriger cela, vous devez déplacer manuellement la barre d'outils à l'endroit original.
Ajouter ci-dessous les balises de la "android.de soutien.v7.Widget de.Barre d'outils" affichage :
La meilleure façon d'y parvenir est comme Stimsoni dit
Ajouter android:fitsSystemWindows="true" à la CoordiatorLayout, AppBarLayout et ImageView
Prolonger la
CoordinatorLayout
et appelsetOnApplyWindowInsetsListener
dans votre constructeur de réinitialiser les valeurs des encarts. Voici le code:J'ai le même problème, mais il y a une chose que je sais.
Si vous avez un transparent de la barre d'état normal de la barre d'outils, vous devez ajouter un 16dp rembourrage haut.
fitsSystemWindow=true
de la mise en page et l'activation de<item name="android:windowTranslucentStatus">true</item>
de travail.Suffit de Changer la couleur de la barre d'état en Styles.XML(v21)
ou supprimer la ligne ci-dessus dans ce XML travail parfait.