Ho uno RecyclerView
all'interno di uno ViewPager
che occupa solo la metà inferiore dello schermo e quello che voglio fare è avere lo scroll intero dello schermo se lo RecyclerView
s ha ricevuto un evento di scorrimento verticale .Android: problemi di scorrimento con recyclerview all'interno di un viewpager
gerarchia dell'interfaccia utente in poche parole:
CoordinatorLayout
--- AppBarLayout
--- Toolbar
--- Bunch of static LinearLayouts, occupy most of screen
--- TabLayout
--- ViewPager
--- Fragments with RecyclerView
Quello che ho:
Per la mia comprensione, un RecyclerView
è la memoria efficiente e cerca di adattarsi se stessa in qualunque spazio è disponibile in lo schermo. Nella mia app, ho un ViewPager
che ospita più schede, ognuna delle quali ha un RecyclerView
per visualizzare cose diverse.
Potresti per favore darmi qualche idea di cosa potrei fare per far scorrere l'intero schermo? Immagino che lo scatto migliore sia quello di aggiungere uno CollapsingToolbarLayout
con parallasse al contenuto statico nel mezzo dello schermo. Ho anche provato a farlo, ma l'interfaccia utente era completamente rotta. È difficile dal momento che voglio solo il contenuto al centro dello schermo per scorrere fuori, non le barre degli strumenti in cima. Non ho avuto molta fortuna con un NestedScrollView
né, a quanto pare la sua compatibilità con ViewPager
e CoordinatorLayout
non è straight-forward ..
Main Activity Disposizione:
<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"
>
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_contributor"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:focusableInTouchMode="true">
<android.support.v7.widget.SearchView
android:id="@+id/searchview_contributor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:icon="@drawable/ic_search_white_24dp"
app:defaultQueryHint="Bla bla"
app:iconifiedByDefault="false"/>
<ImageButton
android:layout_width="24dp"
android:layout_height="24dp"
android:background="@android:color/transparent"
android:src="@drawable/ic_person_outline_black_24dp"/>
</android.support.v7.widget.Toolbar>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight=".5"
android:text="La Bla"/>
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight=".5"
android:text="Bla Bla"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
>
<!-- Bunch of stuff, but irrelevant -->
<android.support.design.widget.TabLayout
android:id="@+id/tablayout_profile"
android:layout_width="match_parent"
android:layout_height="40dp"/>
</LinearLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager_profile"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>
il frammento all'interno del Viewpager:
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview_photos"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
Grazie in anticipo!
Aggiornamento: Le risposte che ho ricevuto qui (per cui sono grato) sono arrivate un po 'troppo tardi. Se qualcuno sa qual è la risposta corretta, per favore fatemelo sapere!