2015-09-04 12 views
5

Quindi ho un RecyclerView orizzontale all'interno di una ScrollView verticale. Tutto ciò che è all'interno del mio layout è visualizzato bene e scorre tutto nelle direzioni che voglio e lo fa senza problemi.Recycler orizzontaleView inside vertical ScrollView

L'unico problema che ho, è che RecyclerView è al di sotto di qualche altro contenuto in ScrollView e quando RecyclerView è parzialmente visibile, si allinea la parte inferiore di RecyclerView con la parte inferiore dello schermo all'avvio. Ciò significa che il contenuto sopra RecyclerView viene rimosso dallo schermo.

Qualcuno sa perché questo accade e come posso risolvere il problema?

Ecco un semplice layout che fa ciò che ho appena descritto. Non è nemmeno necessario popolare il RecyclerView, lo farà comunque.

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="500dp" 
      android:background="#fff"/> 

     <android.support.v7.widget.RecyclerView 
      android:layout_width="match_parent" 
      android:layout_height="200dp" 
      android:background="#000"/> 

    </LinearLayout> 

</ScrollView> 
+0

Controllare questo https://github.com/lucasr/twoway-view/. – Raghunandan

+0

Da quello che so di TwoWayView, non è molto pertinente alla mia domanda, ma grazie comunque. –

risposta

6

Risulta questo problema è stato segnalato a Google qui Issue - 81854

Secondo Google sta funzionando come previsto. Il problema è che RecyclerView ha impostato focusableInTouchMode su true. Per risolvere il problema ho impostato focusableInTouchMode e focusable su true nella vista più in alto di ScrollView.

Di seguito si riporta la correzione per il codice di esempio che ho fornito nella domanda iniziale:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="500dp" 
      android:background="#fff" 
      android:focusableInTouchMode="true" 
      android:focusable="true"/> 

     <android.support.v7.widget.RecyclerView 
      android:layout_width="match_parent" 
      android:layout_height="200dp" 
      android:background="#000"/> 

    </LinearLayout> 

</ScrollView> 
+0

Hai detto di impostare 'focusableInTouchMode' e' focusable' su true nella vista più in alto di ScrollView. Ma nel codice vedo qualcosa di diverso. Si prega di precisare. –

+0

@Parsi Scusa. Poiché ScrollView può avere un solo figlio, intendevo la vista più in alto del bambino ScrollView. –

+0

Allora non capisco. Grazie. Nessuna menzione :) –