6 votes

Impossible d'utiliser la disposition ScrollView dans la disposition SlidingUpPanelLayout Xamarin Android

J'ai utilisé cette bibliothèque dans mon code. En fait, j'ai un ScrollView sur le panneau SlidingUp. Le code est le suivant :

<cheesebaron.slidinguppanel.SlidingUpPanelLayout
                android:id="@+id/sliding_layout"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="bottom">
                <android.support.v4.view.ViewPager
                    android:id="@+id/HomeFrameLayout"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" />
                <ScrollView
                    android:id="@+id/slidingPanelScrollView"
                    android:layout_height="match_parent"
                    android:layout_width="match_parent"
                    android:background="@android:color/transparent"
                    android:clickable="true"
                    android:focusable="false">
                    <RelativeLayout
                        android:layout_height="match_parent"
                        android:layout_width="match_parent">
                        <RelativeLayout
                            android:id="@+id/cardHolderRelativeLayout"
                            android:layout_height="match_parent"
                            android:layout_width="380dp"
                            android:background="@android:color/transparent"
                            android:layout_centerHorizontal="true"
                            android:padding="10dp">
                            <LinearLayout
                                android:id="@+id/linearLayout1"
                                android:layout_height="250dp"
                                android:layout_width="match_parent"
                                android:background="#FF0000"
                                android:layout_marginBottom="15dp" />
                            <LinearLayout
                                android:id="@+id/linearLayout2"
                                android:layout_height="250dp"
                                android:layout_width="match_parent"
                                android:background="#00FF00"
                                android:layout_marginBottom="15dp"
                                android:layout_below="@id/linearLayout1" />
                            <LinearLayout
                                android:id="@+id/linearLayout3"
                                android:layout_height="250dp"
                                android:layout_width="match_parent"
                                android:background="#0000FF"
                                android:layout_marginBottom="15dp"
                                android:layout_below="@id/linearLayout2" />
                            <LinearLayout
                                android:id="@+id/linearLayout4"
                                android:layout_height="250dp"
                                android:layout_width="match_parent"
                                android:background="#0000FF"
                                android:layout_marginBottom="15dp"
                                android:layout_below="@id/linearLayout2" />
                        </RelativeLayout>
                    </RelativeLayout>
                </ScrollView>
            </cheesebaron.slidinguppanel.SlidingUpPanelLayout>

Ce que je veux obtenir, c'est que, si le SlidingUpPanelLayout est étendu, l'utilisateur puisse faire défiler le ScrollView. Si le ScrollView est déroulé jusqu'en haut (l'utilisateur fait défiler la page vers le bas sur son téléphone) et que l'utilisateur continue à faire défiler la page vers le bas, le SlidingUpPanelLayout doit s'effondrer.

Je mets en œuvre le code suivant :

_slidingUpPanelLayout.NestedScrollingEnabled = true ;

        _scrollView.ViewTreeObserver.ScrollChanged += (sender, e) => 
        {
            var y = _scrollView.ScrollY;
            if (y < -20)
            {
                _slidingUpPanelLayout.SlidingEnabled = true;
            } 

        };

        _slidingUpPanelLayout.PanelExpanded += (sender, args) => 
        {
            RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MatchParent, RelativeLayout.LayoutParams.MatchParent);
            _cardHolderRelativeLayout.LayoutParameters = layoutParams;

            _slidingUpPanelLayout.SlidingEnabled = false;
        };

En fait, j'ai défini SlidingEnable sur true/false pour modifier l'écouteur d'événements de défilement.

Cependant, il y a un problème avec le ScrollView. Il ne se déclenche que lorsque le ScrollView est défilé vers le haut, puis vers le bas.

Quoi qu'il en soit, je ne pense pas que mon approche soit une bonne approche. Avez-vous des suggestions ? Par ailleurs, lorsque je regarde la bibliothèque AndroidSlidingUpPanel sur Android native, il semble qu'elle prenne déjà en charge ScrollView dans SlidingUpPanelLayout. Je ne sais pas si j'ai raison ou non.

Je ne suis pas non plus certain qu'il y ait quelque chose à faire avec NestedScrollingEnabled = true pour le panneau SlidingUp ou non, mais j'ai vu pas mal de recommandations sur Stackoverflow.

A la vôtre,

-1voto

Sanny Nagveker Points 352

Essayez d'utiliser nestedScrollview au lieu de scrollview.

NestedScrollView scrollView = (NestedScrollView) findViewById (R.id.scrollView);
scrollView.setFillViewport (true);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X