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:
Si vous souhaitez obtenir une liste avec ce comportement, vous devez:
compile 'com.Android.support:design:22.2.0'
CoordinatorLayout
avec une barre d'outils où vous devez définir app:layout_scrollFlags="scroll|enterAlways"
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>
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>
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.
Faire Listview nestedScrollingEnabled, fonctionne pour> API 21
Android:nestedScrollingEnabled="true"
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"
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"
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