5

Ich versuche eine Ansicht zu erstellen, die es dem Benutzer ermöglicht, eine Excel-ähnliche Struktur horizontal und vertikal zu scrollen. Meine ursprüngliche Idee war, ein RecyclerView (mit LinearManager) in ein HorizontalScrollView zu bringen. Aber es scheint nicht zu funktionieren.2D-Liste mit RecyclerView in HorizontalScrollView

Hier ist mein Code:

<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> 

Gerade jetzt nur sie die Recycler blättern erlaubt, scheint die HorizontalScrollView wie ein normaler FrameLayout zu handeln (wie die Ansichten innerhalb der Recycler sind an den Rand Clipping).

Ich denke, dass es relevant sein kann, dass die Ansichten, die ich in den Recycler einsetze, feste Größe haben.

Gibt es Tipps, wie Sie dieses Konzept zum Laufen bringen?

+0

Haben Sie einen Blick auf [RecyclerView Spielplatz] (https://github.com/devunwired/recyclerview-playground) genommen? – kassim

+0

AFAIK 'fill_parent' und' match_parent' haben übrigens den gleichen Effekt. –

+0

Irgendwelche Fortschritte dabei? – headsvk

Antwort

1

[GELÖST]

der All Trick ist, manuell eingestellt RecyclerView Breite, weil es WRAP_CONTENT ablehnt und immer maximal so breit wie Bildschirmbreite ist. Trick folgt:

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; 
} 
} 

und dann einfach:

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

und es funktioniert! Glücklich Codierung ...

Probe Arbeitscode: https://dl.dropboxusercontent.com/u/79978438/RecyclerView_ScrollView.zip

+0

Könnten Sie bitte Ihr Beispiel auf GitHub veröffentlichen? Dropbox-Link funktioniert nicht. –

+0

Hallo, hier funktioniert Link: https://www.dropbox.com/s/d8tvppwvo9s2w24/RecyclerView_ScrollView.zip?dl=0 – Hox