5

Sto cercando di creare una vista che consenta all'utente di scorrere una struttura simile a Excel sia in orizzontale che in verticale. La mia idea iniziale era di mettere un RecyclerView (con LinearManager) in un HorizontalScrollView. Ma non sembra funzionare.Elenco 2D con RecyclerView in HorizontalScrollView

Ecco il mio codice:

<RelativeLayout 
    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.v7.widget.Toolbar 
     android:id="@+id/gameplay_Toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="56dp" 
     android:background="@color/accent" 
     app:title="@string/gameplay_score_toolbar" 
     app:titleMarginStart="48dp" 
     app:titleTextAppearance="@style/toolbar_title" /> 

    <HorizontalScrollView 
     android:id="@+id/gameplay_hotizontalScroll_ScrollView" 
     android:layout_below="@+id/gameplay_Toolbar" 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent" 
     android:layout_marginTop="5dp" 
     android:layout_marginLeft="5dp" 
     android:fillViewport="true" 
     > 

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

    </HorizontalScrollView> 

</RelativeLayout> 

In questo momento permette solo la Recycler per scorrere, il HorizontalScrollView sembra agire come un FrameLayout normale (come i punti di vista all'interno del Recycler sono di ritaglio per il bordo).

Penso che potrebbe essere importante che le viste che ho inserito nel Recycler abbiano dimensioni fisse.

Qualche suggerimento su come far funzionare questo concetto?

+0

Avete dato un'occhiata a [RecyclerView Playground] (https://github.com/devunwired/recyclerview-playground)? – kassim

+0

A proposito, AFAIK 'fill_parent' e' match_parent' hanno lo stesso effetto. –

+0

qualche progresso su questo? – headsvk

risposta

1

[risolto]

Tutto il trucco è quello di impostare manualmente la larghezza RecyclerView, perché rifiuta di accettare wrap_content e sempre è al massimo larga quanto la larghezza dello schermo. Trucco è la seguente:

public class SmartRecyclerView extends RecyclerView { 

public int computedWidth = <needs to be set from outside> 

public SmartRecyclerView(Context context) { 
    super(context); 
} 

public SmartRecyclerView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public SmartRecyclerView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 

@Override 
public boolean canScrollHorizontally(int direction) { 
    return false; 
} 

@Override 
public int getMinimumWidth() { 
    return computedWidth; 
} 

@Override 
protected void onMeasure(int widthSpec, int heightSpec) {  
    super.onMeasure(widthSpec, heightSpec); 
    setMeasuredDimension(computedWidth, getMeasuredHeight());  
} 

@Override 
protected int getSuggestedMinimumWidth() {  
    return computedWidth; 
} 
} 

e poi semplicemente:

HorizontalScrollView myScroll = ... 
SmartRecyclerView recyclerView = new SmartRecyclerView(...) 
... 
recyclerView.computedWidth = myNeededWidth; 
myScroll.addView(recyclerView); 

e funziona! codifica Felice ...

esempio di codice di lavoro: https://dl.dropboxusercontent.com/u/79978438/RecyclerView_ScrollView.zip

+0

Potresti pubblicare il tuo campione su github? Il collegamento Dropbox non funziona. –

+0

Ciao, ecco il link funzionante: https://www.dropbox.com/s/d8tvppwvo9s2w24/RecyclerView_ScrollView.zip?dl=0 – Hox