Android: cómo incorporar CardViews con ImageViews en una grilla
xml android-imageview (1)
Tengo algunas imágenes cuadradas y quiero ponerlas en filas de 3 que se ajusten al ancho de la pantalla, manteniendo la relación de aspecto de las imágenes. Esto se puede hacer con bastante facilidad. Sin embargo, también quiero poner cada ImageView en un CardView (tarjetas cuadradas), pero cuando lo hago, hay problemas. En lugar de ser la altura de la imagen, la tarjeta es realmente larga. No estoy seguro de lo que salió mal aquí. Debajo está el código que funcionó hasta que puse el primer ImageView en un CardView.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
xmlns:android="http://schemas.android.com/apk/res/android">
<android.support.v7.widget.CardView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<ImageView
android:src="@drawable/square1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/main_dark"
android:adjustViewBounds="true" />
</android.support.v7.widget.CardView>
<ImageView
android:src="@drawable/square2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@color/main"
android:layout_weight="1"
android:adjustViewBounds="true"/>
<ImageView
android:src="@drawable/square3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@color/main_light"
android:layout_weight="1"
android:adjustViewBounds="true"/>
</LinearLayout>
Como quiere tres vistas por fila, independientemente del ancho de la fila, y quiere que todas sean cuadradas, puede usar una vista de tarjeta personalizada y anular onMeasure () para forzar una relación de aspecto de 1: 1.
package com.example.view;
public class SquareCardView extends CardView {
public SquareCardView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int ignoredHeightMeasureSpec) {
int newHeightMeasureSpec = widthMeasureSpec;
super.onMeasure(widthMeasureSpec, newHeightMeasureSpec);
}
}
Luego usa:
<com.example.view.SquareCardView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<ImageView
android:src="@drawable/square1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/main_dark"
android:adjustViewBounds="true" />
</com.example.view.SquareCardView>
No dice que deberías , pero podrías .