2015-07-11 16 views
7

mam 'zdefiniowane s w formacie XML jako:Jak wykonać układ siatki CardViews o zmiennej wysokości?

<android.support.v7.widget.CardView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    card_view:cardPreventCornerOverlap="false" 
    card_view:cardCornerRadius="4dp"> 
    <LinearLayout 
     android:layout_width="wrap_content" 
     android:orientation="vertical" 
     android:layout_height="wrap_content"> 
     <TextView 
      android:textSize="@dimen/abc_text_size_title_material" 
      android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 
</android.support.v7.widget.CardView> 

Dla telefonów, mam owinięty wielokrotne CardView' wielokrotne CardView S w pionowej LinearLayout:

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

Dla tabletek, chciałbym zamiast tego użyj układu siatki, podobnego do wzoru użytego w Material Design specs, patrz obrazek here.

Jaka jest najlepsza ViewGroup do tworzenia układu siatki? Karty mają różną wysokość i mają statyczną zawartość. Nie można użyć

GridLayout, ponieważ karty mają różną wysokość.

Odpowiedz

12

Wcześniej miałem do czynienia z tym samym problemem. Tak, nie można użyć numeru GridLayout, ponieważ karty mają zmienny rozmiar. To, czego szukasz, to StaggeredGridView, dzięki czemu jego elementy mogą mieć zmienne rozmiary.

Można wykonać jedną z następujących: -

1), można użyć this lub this bibliotekę. Są bardzo proste w użyciu. Użyłem obu i mogę was zapewnić, że wykonują swoją pracę doskonale.

2) Możesz wypróbować wersję RecyclerView.StaggeredGridLayoutManager od Google.

Próbkę kodu wyglądałby latków tak,

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 
    recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)); 
    recyclerView.setAdapter(adapter); 

Nadzieję, że to pomaga.

+0

Druga opcja jest najlepsza, jak sądzę .. – Hardy

1

W przypadku tabletów można korzystać z 2 linii LinearLayouts.

Powiązane problemy