J'utilise CoordinatorLayout
dans ma page d'activité. En cela, il y a ListView
sous la barre d'applications. Mais cela ne fonctionne pas lorsque j'utilise ListView
au lieu de NestedScrollView
. Et si je mets ListView
dans NestedScrollView
, ListView
n’est pas en expansion
Pour que CoordinatorLayout
fonctionne correctement, il est nécessaire que l'enfant faisant défiler implémente/ NestedScrollingChild . De telles classes sont NestedScrollView
et RecyclerView
.
Pour faire court, utilisez simplement une RecyclerView
pour votre contenu défilant et tout fonctionnera correctement :)
P.S. En remarque, je ne vois pas pourquoi vous utiliseriez plus une ListView
. Je sais que c'est une habitude et que c'est plus facile à configurer (parce que vous l'avez fait plusieurs fois), mais utiliser une variable RecyclerView
est de toute façon recommandé.
vous pouvez résoudre ce problème en ajoutant addtribute
Android:fillViewport="true"
dans Android.support.v4.widget.NestedScrollView
:). C'est mon code.
<Android.support.v4.widget.NestedScrollView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:scrollbars="none"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
Android:fillViewport="true"
>
<ListView
Android:id="@+id/list_myContent"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:scrollbars="vertical"
>
</ListView>
</Android.support.v4.widget.NestedScrollView>
sur Lollipop, vous pouvez utiliser
setNestedScrollingEnabled(true);
sur votre ListView/GridView/ScrollableView. De la documentation
Activer ou désactiver le défilement imbriqué pour cette vue
si vous avez besoin d'une compatibilité ascendante avec une version antérieure du système d'exploitation, vous devrez utiliser la variable RecyclerView
Vous pouvez en lire plus ici
Modifier. ViewCompat
a la méthode statique setNestedScrollingEnabled(View, boolean)
. Par exemple.
ViewCompat.setNestedScrollingEnabled(listView, true)
merci à @Dogcat
pour l'avoir signalé
Il suffit de mettre Android:fillViewport="true"
à l'intérieur de vous NestedScrollView
Tag
c'est ce qui a fonctionné pour moi.
définir Android:fillViewport="true"
sur la NestedScrollView
ajoutez un élément de mise en forme en tant qu'enfant à NestedScrollView
. Dans mon cas, LinearLayout
et ensuite Définir Android:nestedScrollingEnabled="true"
sur ListView
Faire de ListView
un enfant de LinearLayout
Bon aller
Votre liste va défiler. J'espère vous aider.
<?xml version="1.0" encoding="utf-8"?>
<Android.support.design.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.support.v4.widget.NestedScrollView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fillViewport="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<ListView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:nestedScrollingEnabled="true">
</ListView>
</Android.support.v4.widget.NestedScrollView>
</Android.support.design.widget.CoordinatorLayout>
Le code ci-dessous a fonctionné pour moi:
ViewCompat.setNestedScrollingEnabled(listView, true);
Votre ListView
devrait être à l'intérieur NestedScrollView
Remplacez votre ListView par RecyclerView
si possible sinon créez votre customListView et définissez onMeasure
of ListView
sur ceci:
public NonScrollListView(Context context) {
super(context);
}
public NonScrollListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public NonScrollListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int heightMeasureSpec_custom = MeasureSpec.makeMeasureSpec(
Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, heightMeasureSpec_custom);
ViewGroup.LayoutParams params = getLayoutParams();
params.height = getMeasuredHeight();
}
Cette ListView
ne pourra plus faire défiler et pourra être utilisée dans NestedScrollView
.
Vous ne pouvez pas faire défiler la liste dans une vue nichée. Utilisez Recyclage avec nidcroll.
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v4.widget.NestedScrollView Android:layout_width="match_parent"
Android:layout_height="wrap_content"
xmlns:Android="http://schemas.Android.com/apk/res/Android">
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@color/colorAccent"
Android:orientation="horizontal">
<de.hdodenhof.circleimageview.CircleImageView xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/profile_image"
Android:layout_width="76dp"
Android:layout_height="76dp"
Android:layout_alignParentLeft="true"
Android:layout_alignParentStart="true"
Android:layout_centerVertical="true"
Android:layout_marginLeft="24dp"
Android:layout_marginStart="24dp"
Android:src="@drawable/profile"
app:border_color="#FF000000" />
<LinearLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center_vertical"
Android:layout_marginLeft="20dp"
Android:layout_toRightOf="@+id/profile_image"
Android:gravity="center_vertical"
Android:orientation="vertical">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="IRFAN QURESHI"
Android:textSize="20sp" />
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="[email protected]" />
</LinearLayout>
<ImageView
Android:layout_marginLeft="50dp"
Android:layout_gravity="center_vertical"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/ic_delete_black" />
</LinearLayout>
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="center_horizontal"
Android:background="@color/colorPrimary"
Android:gravity="center_horizontal"
Android:padding="30dp">
<TextView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="center_horizontal"
Android:background="@drawable/login_email_bg_round_rect_shape"
Android:gravity="center_horizontal"
Android:padding="10dp"
Android:text="POST A QUERY" />
</LinearLayout>
<!--<ListView
Android:id="@+id/list"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
</ListView>-->
<Android.support.v7.widget.RecyclerView
Android:id="@+id/recycler_view"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:scrollbars="vertical" />
<RelativeLayout
Android:background="@color/colorAccent"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<TextView
Android:padding="8dp"
Android:gravity="center_vertical"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="SIGN OUT" />
<ImageView
Android:paddingTop="5dp"
Android:layout_marginRight="40dp"
Android:layout_alignParentRight="true"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/ic_delete_black" />
</RelativeLayout>
</LinearLayout>
</Android.support.v4.widget.NestedScrollView>
</Android.support.v4.widget.NestedScrollView>
Ajoutez simplement Android: nestedScrollingEnabled = "true" dans votre NestedScrollView.
<Android.support.v4.widget.NestedScrollView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:scrollbars="none"
Android:nestedScrollingEnabled="true">
<ListView
Android:id="@+id/list_myContent"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:scrollbars="vertical">
</ListView>
J'ai trouvé que cette solution de Prokash Sarkar fonctionnait parfaitement pour développer le contenu d'un ListView afin qu'il puisse défiler correctement dans un NestedScrollView.
Impossible de faire défiler ListView dans son parent NestedScrollView - Android
J'espère que cela aidera les autres qui recherchent NestedScrollView et ListView ..