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