2015-10-11 18 views
12

Ho un RecyclerView che visualizza il contenuto dinamico. Vorrei visualizzare questo RecyclerView tra altre visualizzazioni. Per esempio, una vista visualizzata sopra e una vista visualizzato sotto l'RecyclerView:Visualizzazioni sopra e sotto RecyclerView

View 
RecyclerView 
View 

Tuttavia, qualunque cosa io cerco non sembra essere di lavoro e la RecyclerView sembra prendere l'intero spazio. Credo che il problema risieda nello wrap_content issue, anche se ho provato alcune soluzioni suggerite, come ad esempio this custom LinearLayoutManager, ma non sembra che risolva il mio problema.

Tentativo:

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

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

     <!-- AppBar works fine; no issue here --> 
     <android.support.design.widget.AppBarLayout 
      android:layout_height="wrap_content" 
      android:layout_width="match_parent" 
      android:id="@+id/app_bar_layout"> 

      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_height="?attr/actionBarSize" 
       android:layout_width="match_parent" 
       app:layout_collapseMode="pin"/> 

     </android.support.design.widget.AppBarLayout> 

     <!-- Not displaying; Tried different views --> 
     <com.chrynan.taginput.view.TextInputWrapper 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/edit_text_container"> 
      <AutoCompleteTextView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:id="@+id/edit_text"/> 
     </com.chrynan.taginput.view.TextInputWrapper> 

     <!-- Takes up entire screen space --> 
     <android.support.v4.widget.SwipeRefreshLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/swipe_refresh"> 

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

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

     <!-- Not displaying --> 
     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/text_view"/> 

    </LinearLayout> 

</android.support.design.widget.CoordinatorLayout> 

Domanda: C'è un modo per posizionare e visualizzare una vista sopra e una visualizzazione di sotto di una RecyclerView? Se é cosi, come? O è meglio usare un ListView?

risposta

25

cosa circa l'utilizzo di weight?

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://..." 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"   
    android:orientation="vertical" 
    > 

    <View 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     /> 

    <RecyclerView 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     /> 

    <View 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     /> 
</LinearLayout> 
+0

Sia perché il mio layout è leggermente più complesso che nell'esempio che ho dato o a causa del bug noto con RecyclerView, semplicemente aggiungendo un layout_weight non ha funzionato. Tuttavia, ho deciso di utilizzare un ListView anziché un RecyclerView e l'aggiunta di layout_weight a ListView mi ha dato l'effetto desiderato. – chRyNaN

+1

Ottima risposta. Questo ha funzionato bene per me. – Mythul

+0

Eccellente Super Fantastico ...... –

1

Questa potrebbe non essere la soluzione tipica, ma puoi comunque provarla.

Come utilizzare un RelativeLayout anziché LinearLayout e semplicemente impostare il riempimento superiore e inferiore di SwipeRefreshLayout all'altezza delle viste come segue.

<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:fitsSystemWindows="true"> 

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

    <!-- your app bar --> 

    <!-- Not displaying; Tried different views --> 
    <com.chrynan.taginput.view.TextInputWrapper 
     android:layout_width="match_parent" 
     android:layout_height="150dp" 
     android:layout_alignParentTop="true" 
     android:id="@+id/edit_text_container"/> 

    <!-- Takes up entire screen space --> 
    <android.support.v4.widget.SwipeRefreshLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:paddingTop="150dp" 
     android:paddingBottom="250dp" 
     android:id="@+id/swipe_refresh"> 

     <android.support.v7.widget.RecyclerView 

      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/recycler_view"/> 

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

    <!-- bottom view --> 
    <TextView 
     android:layout_alignParentBottom="true" 
     android:layout_width="match_parent" 
     android:layout_height="250dp" 
     android:id="@+id/text_view"/> 

</RelativeLayout> 

+1

Purtroppo questa non è una soluzione valida per me dal momento che le mie viste dall'alto e dal basso cambiano le dimensioni in modo dinamico. – chRyNaN

+0

Perché non resettare il padding anche dinamicamente? – Ari

+0

La messaggistica con il padding dinamicamente non ha funzionato per me. Ho provato a utilizzare invece un ListView e ho aggiunto l'attributo layout_weight su di esso, che ha prodotto l'effetto desiderato. Grazie per l'aiuto. – chRyNaN

1

uso intestazione e piè per l'RecyclerView, uso viewType in Recyclerview Adapter e aggiungere intestazione e piè di view.The problema che si trovano ad affrontare è a causa della scollview multiple in un unico layout e la soluzione migliore è quello di utilizzare intestazione e piè di pagina, questo lo renderà come singola scrollview. vedi questo link per maggiori informazioni https://stackoverflow.com/questions/26245139/how-to-create-recyclerview-with-multiple-view-type?rq=1

Problemi correlati