1
votes

Comment réduire la barre d'outils pendant que je fais défiler un RecyclerView dans ConstraintLayout?

J'ai une activité dans laquelle j'ai défini NavigationDrawer et fonctionne correctement. Cette activité héberge un fragment où j'ai utilisé:

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <ProgressBar
        android:id="@+id/progress_bar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Pour activer le menu. J'ai ajouté un SearchView et écraser onCreateOptionsMenu():

@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.menu, menu);
    MenuItem searchItem = menu.findItem(R.id.search);
    //Do some search stuff
}

Et tout fonctionne bien. Voici le fichier de mise en page de mon fragment:

setHasOptionsMenu(true);

Maintenant, je veux réduire la barre d'outils pendant que je fais défiler le RecyclerView . Je sais que je peux ajouter un AppBarLayout et à l'intérieur une Toolbar dans mon fichier de mise en page, mais est-il possible d'obtenir le même comportement avec celui existant dans un ConstraintLayout?


4 commentaires

Les animations ne seront pas aussi fluides et vous réinventerez la roue. Mieux vaut simplement ajouter un AppBarLayout et une barre d'outils. Pensez également à CoordinatorLayout si vous allez ajouter l'appbarlayout


Peut-être que cela aidera. journaldev.com/13927/android-collapsingtoolbarlayout-example


@sonnet Merci pour cela. Tous les exemples que j'ai trouvés utilisent un CoordinatorLayout . Est-ce le meilleur moyen? Si je souhaite toujours y parvenir avec un ConstraintLayout , comment dois-je faire?


@Jorn AFAIK, CoordinatorLayout est la seule vue native qui possède la fonctionnalité que vous recherchez. Si vous souhaitez masquer complètement la barre d'outils , vous aurez besoin d'une connaissance approfondie du développement Android pour en créer une.


3 Réponses :


0
votes

Vous pouvez le faire avec l'aide de CordinaterLayout.Veuillez lire cette réponse.

Masquer l'AppBar lors du défilement vers le bas


4 commentaires

Merci mais ma question concerne un ConstraintLayout . Puis-je réaliser la même chose avec? Si oui, comment?


Oui, vous pouvez obtenir la même chose avec le ConstraintLayout. 1: Ajouter ParentLayout de CordinateLayout de votre ConstraintLayout 2: Utiliser peut également utiliser android.support.design.widget.CollapsingToolbarLayout 3: Activer la vue imbriquée de votre rescyclerView.


Cela pourrait être un commentaire. Veuillez ne pas simplement répondre pour publier un lien vers une autre solution existante


@umerfarooq Je ne veux pas utiliser un AppBarLayout avec une `Toolbar` dans un fichier .XML, je veux juste utiliser l'existant. Est-ce même possible?



0
votes
  <androidx.coordinatorlayout.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:id="@+id/DashCoor"
        android:fitsSystemWindows="true"
        tools:context=".Activities.DashboardActivity">


        <com.google.android.material.appbar.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:fitsSystemWindows="true"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">


            <com.google.android.material.appbar.CollapsingToolbarLayout
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:visibility="gone"
                app:expandedTitleMarginStart="48dp"
                app:expandedTitleMarginEnd="64dp"
                app:layout_scrollFlags="scroll|enterAlways|snap"
                >
                ​


               //Layout to be collpased

            </com.google.android.material.appbar.CollapsingToolbarLayout>

            <androidx.appcompat.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:titleTextColor="@color/white"
                android:fitsSystemWindows="true"
                android:minHeight="?attr/actionBarSize"
                app:theme="@style/ThemeOverlay.AppCompat.Light"
                app:layout_scrollFlags="scroll|enterAlways|snap"
                />

         </com.google.android.material.appbar.AppBarLayout>

         </androidx.coordinatorlayout.widget.CoordinatorLayout>

0 commentaires

1
votes

Avec CoordinatorLayout :

La meilleure chose aurait été d'utiliser un CoordinatorLayout . Une question similaire ici devrait être capable de vous aider.

Puisque vous voulez y parvenir avec ConstraintLayout :

Vous devrez créer une classe OnScrollListener pour votre RecyclerView . La classe aurait une méthode onScrolled () qui aurait des paramètres - dx, dy, les quantités de défilement horizontal et vertical. Voici un lien sur la façon dont vous pouvez continuer avec.

J'espère que cela aide :)


0 commentaires