Arrière-plan
J'essaie d'ajouter la même fonctionnalité comme illustré sur de nombreuses applications, où la partie supérieure de l'écran se rétrécit&se dilate en fonction de la défilé de contenu.
Pour cela, j'utilise Google bibliothèque de conception, comme illustré sur la CheeseSquare de l'échantillon.
Le problème
C'est que, n'importe comment beaucoup de contenu, il est dans le NestedScrollView , ça me permet de faire défiler au-dessous de la dernière vue du contenu, juste de me laisser voir l'état final de l'actionbar, ayant la taille minimale de lui-même.
En bref, c'est ce que je vois lorsque le défilement vers le bas (modifié le contenu de CheeseSquare de l'échantillon):
alors que c'est ce que j'aimerais avoir en cas de défilement vers le bas (prises à partir de l'application de contacts) :
Je suis aussi en train d'essayer de corriger un bug sur ThreePhasesBottomSheet échantillon de défilement en bas de la feuille de contenu est possible, même quand il est en peek-état. De reproduire, de commencer à faire défiler horizontalement (ce qui ne veut pas faire n'importe quoi, comme il n'y a rien à faire défiler de cette façon) et puis à la verticale, ce qui serait en quelque sorte de déclencher le défilement du contenu de la partie inférieure de la feuille.
Donc, j'ai besoin de désactiver il y a le défilement dans "transformView()" la méthode, dans le cas que "la traduction
C'est la façon dont il fonctionne à l'aide de l'utilisation normale:
Et c'est comment il se comporte avec le bug de ne pas bloquer le défilement:
Ce que j'ai essayé
J'ai essayé de jouer avec le "layout_scrollFlags" drapeaux, pour modifier la hauteur de wrap_content, et de supprimer les clipToPadding et fitsSystemWindows attributs.
Voici l'exemple de fichier XML, que j'ai modifié pour inclure qu'une seule cardView au lieu de plusieurs:
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="@dimen/detail_backdrop_height"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:fitsSystemWindows="true">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginStart="48dp"
app:expandedTitleMarginEnd="64dp">
<ImageView
android:id="@+id/backdrop"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:fitsSystemWindows="true"
app:layout_collapseMode="parallax" />
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:layout_collapseMode="pin" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingTop="24dp">
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/card_margin">
<LinearLayout
style="@style/Widget.CardContent"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Info"
android:textAppearance="@style/TextAppearance.AppCompat.Title" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/cheese_ipsum" />
</LinearLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
<android.support.design.widget.FloatingActionButton
android:layout_height="wrap_content"
android:layout_width="wrap_content"
app:layout_anchor="@id/appbar"
app:layout_anchorGravity="bottom|right|end"
android:src="@drawable/ic_discuss"
android:layout_margin="@dimen/fab_margin"
android:clickable="true"/>
</android.support.design.widget.CoordinatorLayout>
J'ai essayé le code suivant aussi :
((AppBarLayout.LayoutParams) collapsingToolbar.getLayoutParams()).setScrollFlags(0);
mais il y a encore permis de défilement de la NestedScrollView lui-même dans le CheeseSquare exemple, et permet aussi la jetant dans le ThreePhasesBottomSheet de l'échantillon .
Les questions
Que puis-je faire afin de rendre le défilement s'arrêter quand il n'y a pas plus de contenu à afficher au bas de l'échelle?
-
En outre, ce qui peut être fait pour désactiver le défilement de la NestedScrollView en tout temps, je souhaite ( pour le ThreePhasesBottomSheet exemple) ? Quelque chose comme "setEnableScrolling(...)" ?
J'ai essayé d'étendre NestedScrollView et également s'étendre à partir de ScrollingViewBehavior, mais pas réussi à trouver ce qui peut être fait pour désactiver le défilement.
C'est probablement une chose très simple à changer, mais je ne peux pas trouver ce que...
EDIT: si nécessaire, c'est ce que j'utilise actuellement pour la conception et la bibliothèque de prise en charge
compile 'com.android.support:appcompat-v7:23.1.0'
compile 'com.android.support:design:23.1.0'
EDIT: pour le #2, j'ai trouvé une solution de contournement à partir de l'intérieur de la BottomSheetLayout.java fichier, de désactiver tout ce qui est lié à la variable "sheetViewOwnsTouch", comme si c'est toujours la valeur "false". Cela permettra de voler les événements tactiles sur le bas de la feuille. Cependant, c'est juste une solution de contournement, et seulement dans ce cas. Il provoque aussi certains événements tactiles qui doit avoir été traité par d'autres points de vue. Je souhaite toujours de savoir comment faire pour bloquer le défilement de la programmation, et aussi dans les autres cas de suffisamment d'espace-pour-afficher-le contenu.