studio recyclerview imágenes example con cardview card android android-recyclerview layout-manager wrap android-cardview

imágenes - cardview recyclerview android studio



Haga RecyclerView para envolver su contenido cuando use CardView con ImageView cuadrado (0)

Estoy tratando de lograr la siguiente estructura (imagen a continuación). Como puede ver, hay dos secciones con RecyclerView y CardView . Estas dos secciones están divididas por dos TextView s con Button s.

Cada sección debe coincidir con el ancho de la pantalla (menos sangría entre las tarjetas). Cada CardView tiene ImageView cuadrado en él. Así que la altura de CardView depende del ancho de la pantalla: card_height = screen_width - indent_between_cards + space_for_card_text . Para lograr este comportamiento, uso SquareImageView simple, que se ve así:

public class SquaredImageView extends ImageView { public SquaredImageView(Context context) { super(context); } public SquaredImageView(Context context, AttributeSet attrs) { super(context, attrs); } public SquaredImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int width = getMeasuredWidth(); setMeasuredDimension(width, width); } }

El diseño de CardView tiene este aspecto:

<CardView android:id="@+id/card_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="0dp" android:background="@color/snow" android:clickable="true" android:orientation="vertical"> <!-- Image --> <com.test.views.SquaredImageView android:id="@+id/card_image" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- Content --> <LinearLayout android:layout_width="match_parent" android:layout_height="32dp" android:orientation="horizontal"> <!-- Title --> <TextView android:id="@+id/card_title" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_vertical" android:paddingLeft="16dp" android:paddingRight="16dp" android:singleLine="true" android:textColor="@color/stone_dark" android:textSize="14sp" /> <!-- Button --> <ImageView android:id="@+id/card_menu" android:layout_width="24dp" android:layout_height="24dp" android:layout_gravity="center_vertical" android:clickable="true" android:scaleType="center" android:src="@drawable/ic_menu" /> </LinearLayout> </CardView>

Significa que el adaptador de RecyclerView no conoce las dimensiones de CardView por adelantado.

Como probablemente sepa, RecyclerView no tiene un sistema que pueda medir sus vistas secundarias para que su contenido se ajuste correctamente.

Pero el impredecible SquareImageView pantalla completa SquareImageView + funciona bien en la mayoría de los casos, excepto en el que se describe en esta pregunta.

  • ¿Entonces, cuál es el problema? Debería usar su propio LayoutManager o WrappableLayoutManager por @ se-solovyev para resolver su problema.

El problema está en SquareImageView impredecible. Cuando LayoutManager intenta medir su hijo, no obtiene nada. Significa que RecyclerView muestra en pantalla completa (como si el height y el width estuvieran configurados en match_parent ).

Entonces la pregunta es: ¿cómo hacer que RecyclerView con SquareImageView impredecible envuelva su contenido correctamente?

Cualquier ayuda es realmente apreciada . Alex. PD: Perdón por mi inglés :)