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?
3 Réponses :
Vous pouvez le faire avec l'aide de CordinaterLayout.Veuillez lire cette réponse.
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?
<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>
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 :)
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 unConstraintLayout
, 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 labarre d'outils
, vous aurez besoin d'une connaissance approfondie du développement Android pour en créer une.