Masquage de la Barre d'outils sur faites défiler avec recyclerview à l'intérieur de fragment
Je vais essayer d'obtenir de la barre d'outils à l'effondrement de défilement lorsqu'un recyclerview à l'intérieur d'un fragment de défilement. Pour commencer, voici ma page principale:
<DrawerLayout>
<RelativeLayout
android:id="@+id/mainRelativeLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:elevation="5dp"
app:layout_scrollFlags="scroll|enterAlways"
>
</Toolbar>
</android.support.design.widget.AppBarLayout>
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</android.support.design.widget.CoordinatorLayout>
</RelativeLayout>
<!-- ignore -->
<drawercontents>
</DrawerLayout>
De sorte que vous pouvez probablement le deviner mes fragments sont en train d'être chargé dans @id/container
. Mon premier fragment contient le recyclerview, et j'ai mis app:layout_behavior="@string/appbar_scrolling_view_behavior"
sur que recyclerview. Ce n'travail, et la barre d'outils s'effondre sur parchemin. La question est la barre d'outils couvre le haut du contenu du fragment lorsqu'elle n'est pas effondré. L'ajout d'une marge supérieure à la fragment de récipient égale à la taille de la barre d'outils des causes justes, un espace vide à gauche lorsque la barre d'outils s'effondre (évidemment).
Ce qui manque ici? Des idées?
EDIT: Comme demandé, voici la mise en page pour le fragment contenant le recyclerview:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView
android:id="@+id/feed"
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:background="#00000000"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
- Vous pouvez poster votre fragment de mise en page aussi?
- ajouté, cochez la case modifier.
- Laissez-moi vérifier j'ai eu le même problème ... et j'ai résolu mon propre ...j'ai besoin de peu de temps
- Ont u essayé framelayout à l'intérieur de liniear mise en page?
- Avez-vous essayé asc42 la solution de (stackoverflow.com/a/37975782/1185087)? Le déplacement de la layout_behavior à la FrameLayout devrait résoudre le problème!
- Si vous avez trouvé la solution, s'il vous plaît pouvez-vous partager?
Vous devez vous connecter pour publier un commentaire.
Ne l'ai pas testé encore, mais c'est ce que vous devez faire:
app:layout_behavior="@string/appbar_scrolling_view_behavior"
à laFrameLayout
avec l'idcontainer
.android:fitsSystemWindows = "true"
à votreAppBarLayout
.C'est exactement ce que je fais dans mon application, et il fonctionne. Si cela ne fonctionne pas pour vous, essayez de nettoyage (sur Android Studio, Build -> Nettoyage de Projet) de votre projet et de l'exécution de l'application à nouveau.
Mon ami je l'ai fait aujourd'hui et le travail parfait, j'ai 2 fragments les deux ont
RecyclerView
et pouvez faire défilerToolbar
. J'ai regardéchrisbanes's
CheeseSquare
: CheeseSquareSi vous jetez un oeil à
MainActivity
, il ya 3 fragments deTabLayout
et chacun d'eux peut faire défilerToolbar
. Alors j'ai préparé cette mise en page , peut-être que vous allez prendre un coup d'oeil à:mon
activity_home.xml
:Et
content_home.xml
:Si vous prenez un coup d'oeil à mon
ViewPager
, il aapp:layout_behavior="@string/appbar_scrolling_view_behavior"
attributPuis c'est tout. Ne pas ajouter de tout autre comportement du fragment . Juste essayer comme ça et venir avec un résultat s'il vous plaît !
Vous avez besoin de quelque chose de similaire à la play store.
Coller les mises en page ici. Le code est facile et vous pouvez le code par vous-même.
Avec la disposition ci-dessus hiérarchie vous pouvez obtenir quelque chose comme ceci:
Faire une mise en page nom de toolbar.xml et l'inclure dans votre code où vous souhaitez l'utiliser, mais de rappeler une chose s'il vous plaît ne pas utiliser un autre layout comme Relativelayout, Linearlayout et d'autres au-dessus de
Vous pouvez utiliser l'Effondrement de mise en page
comme
Vous pouvez résoudre ce problème en ajoutant un troisième drapeau -
snap
, àlayout_scrollFlags
propriété.L'utilisation de cette option permettra de déterminer que faire lors d'un point de vue seulement a été partiellement réduite. Si le défilement se termine et le point de vue de la taille a été réduite à moins de 50% de sa valeur d'origine, puis de ce point de vue pour revenir à sa taille d'origine. Si la taille est supérieure à 50% de sa taille, il disparaîtra complètement.
cochez cette lien.
J'ai utilisé un
SwipeRefreshLayout
ou tout simplement unLinearLayout
ouRelativeLayout
comme la racine de laFragment
's layout, et ça fonctionne.Avec
RelativeLayout
:Alors il doit être bon d'aller.
Également rencontré ce problème. Mais une solution a été trouvée. La solution avec xml retouches peut-être pas, si vous avez besoin de le faire par programmation. Tous nous avons besoin est Inflater. Oui, oui, c'est tellement simple. À la volée changement xml pour travailler tout de défilement.
dans votre framelayout ensemble
si cela fonctionne pas, alors essayez ceci:
android:layout_below
peut être utilisé avec des enfants d'unRelativeLayout
. UnCoordinatorLayout
est essentiellement une version avancée deFrameLayout
, donc cela ne veut rien dire.