Estoy tratando de hacer una vista de cuadrícula con dos columnas. Me refiero a dos fotos por fila una al lado de la otra como esta imagen.
Pero mis imágenes tienen espacios entre ellas, debido al hecho de que no es del mismo tamaño. Esto es lo que estoy obteniendo.
Como puede ver, la primera imagen oculta la leyenda que muestra el nombre del contacto y el número de teléfono. y las otras imágenes no se estiran correctamente.
Aquí está mi archivo xml GridView . Como puede ver, el columnWidth
está configurado en 200dp . Me gustaría que sea automático , para que las imágenes cambien de tamaño automáticamente para cada tamaño de pantalla.
<?xml version="1.0" encoding="utf-8"?>
<GridView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridViewContacts"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="2"
android:columnWidth="200dp"
android:stretchMode="columnWidth"
android:gravity="center" />
y aquí está el archivo xml del elemento, que representa cada elemento en sí.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/imageViewContactIcon"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY" />
<LinearLayout
android:id="@+id/linearlayoutContactName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="5dp"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:background="#99000000"
android:layout_alignBottom="@+id/imageViewContactIcon">
<TextView
android:id="@+id/textViewContactName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:textStyle="bold"
android:textSize="15sp"
android:text="Lorem Ipsum" />
<TextView
android:id="@+id/textViewContactNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:layout_marginLeft="5dp"
android:focusable="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:textSize="10sp"
android:text="123456789" />
</LinearLayout>
</RelativeLayout>
Entonces, lo que quiero es mostrar dos imágenes por fila, y las imágenes se redimensionan automáticamente, sin importar el tamaño de la pantalla. ¿Qué estoy haciendo mal en mi diseño?
Gracias.
scaleType
propiedad centerCrop en ImageView. Lo que necesito lograr es una forma de hacer las imágenes una al lado de la otra y cambiar el tamaño automáticamente para diferentes tamaños de pantalla.Respuestas:
Aquí hay un método relativamente fácil para hacer esto. Lanza un GridView a tu diseño, configura el modo de estiramiento para estirar los anchos de columna, establece el espaciado en 0 (o lo que quieras) y establece el número de columnas en 2:
res / layout / main.xml
Haga una costumbre
ImageView
que mantenga su relación de aspecto:src / com / example / graphicstest / SquareImageView.java
Haga un diseño para un elemento de cuadrícula utilizando este SquareImageView y configure el scaleType en centerCrop:
res / layout / grid_item.xml
Ahora haga algún tipo de adaptador para su
GridView
:src / com / example / graphicstest / MyAdapter.java
Configure ese adaptador para su
GridView
:Y disfruta los resultados:
fuente
ImageView
y por qué usar algo como esto en<com.example.graphicstest.SquareImageView>
lugar de una<ImageView>
etiqueta simple en el archivo xml . ¿Podría explicarme más sobre esta relación de aspecto y cómo no crear esta clase afecta los elementos? ¿Hay alguna manera de optimizar esto, sin la necesidad de laImageView
clase personalizada ? Gracias por tu ayuda de todos modos.otro enfoque simple con cosas integradas modernas como PercentRelativeLayout ahora está disponible para nuevos usuarios que enfrentan este problema. Gracias al equipo de Android por lanzar este artículo.
y para un mejor rendimiento, puede usar algunas cosas como el cargador de imágenes picasso que lo ayudan a llenar todo el ancho de cada imagen de los padres. por ejemplo en tu adaptador deberías usar esto:
ahora ya no necesita la clase CustomImageView.
PD: recomiendo usar ImageView en lugar de Type Int en la clase Item.
espero que esto ayude..
fuente