2011-03-16 2 views
7

en una aplicación Android necesito agregar una vista a mi RelativeLayout que obedece a las siguientes reglas:diseño Android: vistas cuadráticas

  1. La vista debe ser cuadrática, es decir, la altura y la anchura de la vista debe coincidir .
  2. La vista debe llenar todo el ANCHO.

Se debe tener este aspecto (el cuadrado debe estar centrada verticalmente):

+-------------+ 
| activity | 
|    | 
|+-----------+| 
||   || 
|| square || 
||   || 
||   || 
|+-----------+| 
|    | 
|    | 
+-------------+ 

Al final quiero tener un ImageView que muestra una imagen cuadrática. Actualmente lo hice estableciendo tanto el ancho como el alto de la vista en FILL_PARENT, y dejo que ImageView dibuje la imagen correctamente (usando scaleType = centerInside).

Pero: ahora quiero tener una vista adicional que esté alineada con la línea superior de la vista cuadrada, y aquí es donde falla mi enfoque. Si ahora configuro el ancho de la vista en FILL_PARENT y el alto en WRAP_CONTENT, la imagen ya no se ajustará al ancho completo.

¿Tiene alguna solución a este problema? Sería preferible si esto pudiera hacerse simplemente escribiendo XML, si es posible.

¡Gracias de antemano!

Respuesta

4

Mira la respuesta superior a esta pregunta.

Android layout with square buttons

+1

Ok, parece que no es posible usar XML, sino crear un diseño personalizado. Utilicé el SquareLayout descrito allí, simplifiqué el método onMeasure y funciona perfectamente. Aún así, creo que una solución basada solo en los administradores de diseño actuales debería haber sido mejor, pero desafortunadamente parece que algunos casos de uso como el mío no son compatibles ... ¡Gracias por su ayuda! – mreichelt

+0

Sí, estoy bastante seguro de que codificar el diseño en Java es la única manera. Pero al menos ahora que ha definido SquareLayout, puede volver a utilizarlo en su XML tantas veces como lo necesite. – Nick

0

Si quiere que dos vistas estén una al lado de la otra, ninguna puede tener FILL_PARENT. Parece que lo que necesitas es un LinearLayout horizontal que contenga ImageView y la otra vista. A continuación, configure android:layout_weight="1" y android:layout_width="0dp" en ImageView, que hará que ImageView complete el elemento principal. Luego, configure el layout_width de la otra Vista como "wrap_content".

<LinearLayout android:width="FILL_PARENT" android:height="WRAP_CONTENT"> 
    <ImageView android:layout_height="WRAP_CONTENT" android:layout_width="0dp" android:layout_weight="1" /> 
    <OtherView android:layout_height="WRAP_CONTENT" android:layout_width="WRAP_CONTENT" /> 
</LinearLayout> 
+0

No, esto no funciona. En su caso, ImageView se ajustará al tamaño de la imagen, que se debe escalar hacia arriba. Además, puedo alinear bastante bien las vistas en mi RelativeLayout; solo necesito que ImageView tenga el tamaño correcto (ancho = alto = ancho de la actividad). – mreichelt

Cuestiones relacionadas