5

Próbuję zbudować widok, który pozwoli użytkownikowi przewijać strukturę podobną do Excela zarówno w poziomie, jak iw pionie. Moim początkowym pomysłem było umieszczenie RecyclerView (z LinearManager) w HorizontalScrollView. Ale to nie działa.Lista 2D z RecyclerView w HorizontalScrollView

Oto mój kod:

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

Teraz to tylko pozwala Recycler do przewijania HorizontalScrollView wydaje się działać jak normalny FrameLayout (bo widoki są wewnątrz Recycler wycinek do krawędzi).

Myślę, że może być istotne, że widoki, które umieściłem w Recyklerze mają stały rozmiar.

Jakieś wskazówki dotyczące tego, jak uruchomić tę koncepcję?

+0

Brałeś okiem na [RecyclerView Playground] (https://github.com/devunwired/recyclerview-playground)? – kassim

+0

Nawiasem mówiąc, AFAIK 'fill_parent' i' match_parent' mają taki sam efekt. –

+0

jakiekolwiek postępy w tej sprawie? – headsvk

Odpowiedz

1

[SOLVED]

Cały trik polega na ręcznie ustawić szerokość RecyclerView, ponieważ odmawia przyjęcia WRAP_CONTENT i zawsze jest maksymalnie szeroki jak szerokość ekranu. Sztuką jest następujący:

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

a następnie po prostu:

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

i to działa! Szczęśliwy kodowanie ...

przykładowy kod działa: https://dl.dropboxusercontent.com/u/79978438/RecyclerView_ScrollView.zip

+0

Czy możesz wysłać swoją próbkę na github? Link do Dropbox nie działa. –

+0

Witam, tutaj działa link: https://www.dropbox.com/s/d8tvppwvo9s2w24/RecyclerView_ScrollView.zip?dl=0 – Hox

Powiązane problemy