web-dev-qa-db-fra.com

NestedScrollView n'a pas pu faire défiler avec la hauteur de match_parent enfant

J'implémente NonSwipeableViewPager avec un fragment a NestedScrollView comme ceci, ce que j'attends, c'est que la scrollview peut faire défiler vers le haut et afficher 2 vues de texte:

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v4.widget.NestedScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fillViewport="true">

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:orientation="vertical">

        <RelativeLayout
            Android:layout_width="match_parent"
            Android:layout_height="match_parent">

            <include
                Android:id="@+id/header"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent"
                layout="@layout/header" />

            <ImageView
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:layout_alignParentBottom="true"
                Android:layout_centerHorizontal="true"
                Android:layout_marginBottom="16dp"
                Android:src="@drawable/ic_up" />

        </RelativeLayout>

        <TextView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="Text 1" />

        <TextView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="Text 2" />

    </LinearLayout>

</Android.support.v4.widget.NestedScrollView>

Mais ça ne pouvait pas défiler, j'ai essayé de nombreuses façons mais je n'ai toujours pas trouvé de solution

14
Norutan
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v4.widget.NestedScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fillViewport="true">

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:orientation="vertical">

Cette disposition linéaire doit avoir Android:layout_height="wrap_content".

La raison en est que si l'enfant du scrollview a la même taille que le scrollview lui-même (les deux match_parent pour la hauteur), cela signifie qu'il n'y a rien à faire défiler, car ils sont de la même taille et la vue de défilement ne sera aussi haute que l'écran.

Si la disposition linéaire a une hauteur de wrap_content alors la hauteur n'est pas liée à la hauteur de l'écran et la vue de défilement pourra la faire défiler.

N'oubliez pas qu'un scrollview ne peut avoir qu'un seul enfant direct et que l'enfant a besoin de Android:layout_height="wrap_content"

69
Tim Castelijns

Dans mon cas app:layout_behavior="@string/appbar_scrolling_view_behavior" cela ne fonctionne que si un problème avec un seul visage est à essayer et peut aussi résoudre votre problème. vous devez également ajouter Android:fillViewport="true" mais sans que mon code fonctionne.

 <Android.support.v4.widget.NestedScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fillViewport="true"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:background="@drawable/subscription_background"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">
3
Tariqul