web-dev-qa-db-fra.com

Comment masquer ActionBar en faisant défiler ListView dans Android?

J'ai besoin de créer une interface graphique avec un ListView et un ActionBar qui se cacheront lors du défilement vers le bas et lors du défilement vers le haut, il devra réapparaître.

Les guides suivants ne m'ont pas aidé:

J'ai besoin de quelque chose comme ça:

enter image description here

18
user4789408

Si vous souhaitez obtenir une liste avec ce comportement, vous devez:

  • ajoutez la bibliothèque de support de conception avec compile 'com.Android.support:design:22.2.0'
  • Utilisez un CoordinatorLayout avec une barre d'outils où vous devez définir app:layout_scrollFlags="scroll|enterAlways"
  • Utilisez un RecyclerView au lieu d'un ListView. Comme décrit iciListView et le GridView ont le comportement attendu avec le CoordinatorLayout uniquement avec l'API> 21. Dans ce cas, vous devez utiliser setNestedScrollingEnabled(true);

Le article de blog officiel montre ce cas:

<Android.support.design.widget.CoordinatorLayout
        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">

     <! -- Your Scrollable View -->
    <Android.support.v7.widget.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_width="match_parent"
            Android:layout_height="wrap_content">
          <Android.support.v7.widget.Toolbar
                  ...
                  app:layout_scrollFlags="scroll|enterAlways">


     </Android.support.design.widget.AppBarLayout>
</Android.support.design.widget.CoordinatorLayout>
30
Gabriele Mariotti

Je recommanderais d'utiliser la nouvelle bibliothèque de conception de support de Google.

Incluez-le dans vos dépendances:

compile 'com.Android.support:design:22.2.0'

puis utilisez le AppBarLayout avec NestedScrollView.

Pour votre Toolbar définissez app:layout_scrollFlags="scroll|enterAlways", qui indique qu'il disparaîtra au fur et à mesure du défilement et reviendra immédiatement si vous faites défiler vers le haut (ce qui signifie que vous n'avez pas à faire défiler vers le haut).

<Android.support.design.widget.AppBarLayout
    Android:id="@+id/appbar"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="?attr/actionBarSize"
        Android:background="?attr/colorPrimary"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        app:layout_scrollFlags="scroll|enterAlways" />

</Android.support.design.widget.AppBarLayout>

<Android.support.v4.widget.NestedScrollView
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:layout_gravity="fill_vertical"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <FrameLayout
        Android:id="@+id/container"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"/>

</Android.support.v4.widget.NestedScrollView>
10
Kuba Spatny

Utilisez [CoordinatorLayout]: https://developer.Android.com/reference/Android/support/design/widget/CoordinatorLayout.html , qui permet la co-oridanation entre les vues enfant. c'est comme, agir (AppBarLayout-> défilement) sur une vue quand il y a un comportement observé (ListView-> défilement) dans une autre vue.

  1. Faire Listview nestedScrollingEnabled, fonctionne pour> API 21

    Android:nestedScrollingEnabled="true"
    
  2. Déclenchez le comportement de mise en page pour le défilement de la barre d'applications.

    Android:nestedScrollingEnabled="true"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    
  3. Toute disposition (ToolBar/TabLayout/any), qui est nécessaire pour afficher-masquer/faire défiler, la placer dans AppBarLayout et activer l'indicateur de défilement.

    app:layout_scrollFlags="scroll|enterAlways"
    
5
Annada

vous devez utiliser CoordinatorLayout pour cette tâche. Il fait partie de la bibliothèque de conception de support. Ici , dans la section CoordinatorLayout et la barre d'application , vous pouvez trouver un exemple

2
Blackbelt