2016-02-24 24 views
6

Ho un frammento xml in un TabLayout. TabLayout si trova in un layout di CollapsingToolbar che si interrompe quando si scorre il contenuto dei frammenti in TabLayout verso il basso. Ho un frammento in cui ho bisogno di un TextView sopra un recyclerView.NestedScrollview + TextView + RecyclerView

Se ho il layout, come di seguito preso da this question I asked before:

<LinearLayout> 
    <NestedScrollView 
     <TextView> 
     </TextView> 
    </NestedScrollView> 
    <View> 
    </View> 
    <RecyclerView> 
    </RecyclerView> 
</LinearLayout> 

funziona bene, fino a quando il TextView ha così tanto il contenuto in quanto riempie o occupa la maggior parte dello schermo, il RecyclerView finisce con lo spazio rimanente nella vista da visualizzare:

|------------------| 
|<TextView-------->| 
|<---------------->| 
|<---------------->| 
|<---------------->| 
|<---------------->| 
|</TextView------->| 
|<RecyclerView---->| 
|</RecyclerView--->| 
|__________________| 

Così il recyclerview è lasciato con uno spazio minimo per essere visualizzato. Se Textview occupa l'intero schermo, il recyclerView non viene visualizzato.

Tratto da this SO Question Se il layout è:

<FrameLayout> 
    <NestedScrollView 
     <TextView> 
     </TextView> 
    </NestedScrollView> 
    <View> 
    </View> 
    <RecyclerView> 
    </RecyclerView> 
</FrameLayout> 

Solo i display recyclerView e la TextView è semplicemente inesistente.

se il layout è:

<NestedScrollView> 
    <LinearLayout 
     <TextView> 
     </TextView> 
     <View> 
     </View> 
     <RecyclerView> 
     </RecyclerView> 
    </LinearLayout> 
</NestedScrollView> 

La TextView dimostra, se v'è contenuto nel RecyclerView o meno.

Come posso avere la pergamena TextView fuori dalla finestra abbastanza per rivelare il recyclerview modo che lo schermo può passare da questo:

|------------------| 
|<TextView-------->| 
|<---------------->| 
|<---------------->| 
|<---------------->| 
|<---------------->| 
|</TextView------->| 
|<RecyclerView---->| 
|</RecyclerView--->| 
|__________________| 

a questo:

|------------------| 
|<---------------->| 
|</TextView------->| 
|<RecyclerView---->| 
|<---------------->| 
|<---------------->| 
|<---------------->| 
|<---------------->| 
|</RecyclerView--->| 
|__________________| 

Il mio codice XML corrente in cui viene visualizzato solo il RecyclerView e non il TextView:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout 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="wrap_content" 
      android:background="@color/white" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior"> 


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

    <android.support.v4.widget.NestedScrollView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

     <TextView 
      android:id="@+id/item_shipping_shipping_description" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="start|left" 
      android:padding="@dimen/margin_16" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 
    </android.support.v4.widget.NestedScrollView> 

    <View 
     android:id="@+id/line43" 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/line_height" 
     android:background="@color/light_gray" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 

    </LinearLayout> 


    <android.support.v7.widget.RecyclerView 
     android:id="@+id/item_shipping_fragment_recyclerview" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@color/white" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 
</FrameLayout> 
+0

non è sicuro, ma cercare impostando l'altezza di layout di vista riciclatore di match_parent e l'altezza di framelayout è anche wrap_content in modo da provare cambiandolo anche o entrambi insieme –

+0

Ok ho provato che, impostato sia su match_parent, tutto il successo è stato che il RecyclerView era l'unica vista visualizzata. Ho provato a cambiare il FrameLayout in LinearLayout e l'unica vista visibile era TextView – x10sion

+0

hai una sola vista testo allora perché hai inserito la textview in nestedscrollview? prova rimuovendo scrollview –

risposta

1

L'unica correzione che avevo per il mio problema era di rendere l'elenco programmato annidato all'interno di una scrollView annidata. Non ero in grado di utilizzare il RecyclerView e nestedScrollview insieme.

+0

Beh, ero in grado di farlo con il layout esatto che ti ho dato. L'hai provato? – meltedspark

+0

sì funziona, ma ho quindi 2 diverse aree scorrevoli sulla stessa sezione dello schermo, e per di più ho una barra degli strumenti che crolla in modo che se si scorre su in entrambe le aree scorrevoli sarebbe crollare la barra degli strumenti e basta rendere difficile per navigare sullo schermo. Grazie per il tuo aiuto anche se – x10sion

+0

Così come ho risposto alla tua domanda iniziale, non credi che mi meriti la taglia? Cordiali saluti, il buon compleanno non può ottenere la taglia. – meltedspark

0

Invece di layout del frame prendere LinearLayout con orientamento verticle e mettere recyclerview in un'altra LinearLayout:

<LinearLayout orientation=verticle > 


    <LinearLayout 
     > 

    <android.support.v4.widget.NestedScrollView> 

     <TextView/> 

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

    <View 
     /> 

    </LinearLayout> 

    <LinearLayout> 
     <android.support.v7.widget.RecyclerView/> 
    </LinearLayout> 

</LinearLayout> 

altezza layout della entrambi i layout bambino deve essere impostato wrap_content

+0

Ciao, grazie per questo, ma non ha funzionato neanche, il TextView che sto testando ora ha abbastanza contenuti in per scorrere ma quando raggiunge la fine del TextView il RecyclerView non è visibile – x10sion

+0

pubblica il tuo codice .java –

+0

Questo non è un problema di codice Java dovuto al fatto che tutto funziona bene se il TextView è bello e breve. Il RecyclerView ha spazio sufficiente per visualizzare – x10sion

6

tenta di aggiungere un peso per entrambi i layout.
Per esempio, se si desidera che la parte TextView essere minore o uguale alla parte RecyclerView:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 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"> 

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

     <android.support.v4.widget.NestedScrollView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

      <TextView 
       android:id="@+id/item_shipping_shipping_description" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_gravity="start|left" 
       android:padding="@dimen/margin_16"/> 
     </android.support.v4.widget.NestedScrollView> 

     <View 
      android:id="@+id/line43" 
      android:layout_width="match_parent" 
      android:layout_height="@dimen/line_height" 
      android:background="@color/light_gray"/>  
    </LinearLayout> 

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

     <android.support.v7.widget.RecyclerView 
      android:id="@+id/item_shipping_fragment_recyclerview" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"/> 
    </LinearLayout> 
</LinearLayout> 

In questo modo il TextView contenente il layout saprà che dovrebbe avvolgere il contenuto di una parte, ma hanno lo stesso peso il RecyclerView ha d'altra parte e sceglierà il più piccolo tra di loro.

+0

Ma cosa succede al contenuto nella visualizzazione del testo quando occupa più della metà dello schermo, non si limiterebbe a tagliare la parte inferiore del testo? – x10sion

+0

No, non lo sarebbe perché TextView è avvolto con NestedScrollView. Ho testato questo layout, funziona per me. – meltedspark

+0

Ok, farò un tentativo e ti faccio sapere – x10sion

0

È possibile utilizzare CoordinatorLayout per nascondere TextView su ReciclerView scrolling:

Qui è facile tutorial.