No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Diseño de Interfaces con Absolute Layout en Visual Studio

13/23
Recursos

El Absolute Layout es una herramienta clave en la creación de interfaces de usuario (UI) atractivas y efectivas, ofreciendo una gran flexibilidad en la ubicación y el solapamiento de controles. Este layout permite configurar tanto valores proporcionales como absolutos, facilitando posicionar elementos con precisión y creando superposiciones visuales interesantes en tus diseños.

¿Qué es el Absolute Layout y cuáles son sus principales ventajas?

El Absolute Layout destaca principalmente porque permite superponer diversos controles (o elementos visuales), creando interfaces dinámicas y atractivas visualmente. Este layout maneja dos propiedades esenciales:

  • LayoutBounds: Define la posición (coordenadas X, Y) y el tamaño (ancho, alto) de cada control.
  • LayoutFlags: Indica cómo serán interpretados estos valores definidos en LayoutBounds, bien sea en términos absolutos o proporcionales.

¿Cómo se utilizan las propiedades LayoutBounds y LayoutFlags?

La propiedad LayoutBounds acepta tanto valores absolutos (números enteros que especifican posiciones fijas) como proporcionales (valores decimales entre 0 y 1). Para coordenadas proporcionales, considera el típico plano cartesiano para asignar ubicaciones precisas.

Por otro lado, la propiedad LayoutFlags ofrece opciones como:

  • All: Usa valores proporcionales para coordenadas e interpretación.
  • XProportional / YProportional: Solo la coordenada X o Y será proporcional, respectivamente.

No es obligatorio usar LayoutFlags en caso de emplear valores absolutos.

¿Cómo implementar el Absolute Layout en un ejemplo práctico?

Para implementar este layout, sigue estos pasos básicos:

  1. Abre y cierra las etiquetas <AbsoluteLayout> en tu interfaz.
  2. Agrega etiquetas de controles (como BoxView, Image, Label) dentro del AbsoluteLayout.
  3. Define las propiedades AbsoluteLayout.LayoutBounds indicando posición y tamaño.
  4. Si usas valores proporcionales, agrega la propiedad AbsoluteLayout.LayoutFlags para la interpretación correcta.

Por ejemplo:

<AbsoluteLayout>
  <BoxView AbsoluteLayout.LayoutBounds="0.33, 0.33, 100, 100" AbsoluteLayout.LayoutFlags="All" />
</AbsoluteLayout>

En este ejemplo, las coordenadas (0.33, 0.33) son proporcionales, lo que posiciona el BoxView relativamente al contenedor incluyendo ancho y alto.

¿Qué tener en cuenta al trabajar con imágenes en un Absolute Layout?

Al agregar imágenes o cualquier recurso visual desde tu proyecto, asegúrate de:

  • Ubicarlas dentro de la carpeta de recursos adecuada.
  • Definir correctamente la acción de recurso (por ejemplo, Maui Image) para asegurar que sean visibles en todas las plataformas.
  • Mantener una nomenclatura homogénea (evitar mayúsculas para Android, por ejemplo).

¿Cómo posicionar múltiples controles en Absolute Layout?

Puedes colocar múltiples controles solapados con precisión modificando propiedades individuales de LayoutBounds. Cambiar valores específicos ajustará inmediatamente la posición de los elementos en la interfaz:

  • Modifica la coordenada X para los movimientos horizontales.
  • Modifica la coordenada Y para los movimientos verticales.

Si cambias valores en tiempo de ejecución (por ejemplo, desde Visual Studio), apreciarás en tiempo real cómo se mueven los controles para adaptarse a las nuevas coordenadas asignadas.

¿Quieres seguir practicando y mejorando con Absolute Layout?

Te invitamos a practicar y compartir tus avances con la comunidad. Explora los recursos adicionales recomendados para profundizar tu conocimiento y siéntete libre de compartir tus resultados o hacer preguntas.

Aportes 17

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Este es mi diseño 😃

¡Una imagen de fondo y 8 Labels!

Code

AbsoluteLayoutSample.xaml
Consideraciones: Roboto-Medium.ttf es la fuente que utilizo.

<AbsoluteLayout HorizontalOptions="CenterAndExpand">
    <Image Source="credit_card"
           AbsoluteLayout.LayoutBounds="0,0,250,150"
           AbsoluteLayout.LayoutFlags="PositionProportional"/>
    <Label Text="1111"
           HorizontalOptions="Center"
           VerticalOptions="Center"
           AbsoluteLayout.LayoutBounds="0.1,0.1,60,40"
           AbsoluteLayout.LayoutFlags="XProportional,YProportional"
           TextColor="Silver"
           FontFamily="RobotoMedium"
           FontSize="16"
           FontAttributes="Bold"/>
    <Label Text="2222"
           HorizontalOptions="Center"
           VerticalOptions="Center"
           AbsoluteLayout.LayoutBounds="0.35,0.1,60,40"
           AbsoluteLayout.LayoutFlags="XProportional,YProportional"
           TextColor="Silver"
           FontFamily="RobotoMedium"
           FontSize="16"
           FontAttributes="Bold"/>
    <Label Text="3333"
           HorizontalOptions="Center"
           VerticalOptions="Center"
           AbsoluteLayout.LayoutBounds="0.60,0.1,60,40"
           AbsoluteLayout.LayoutFlags="XProportional,YProportional"
           TextColor="Silver"
           FontFamily="RobotoMedium"
           FontSize="16"
           FontAttributes="Bold"/>
    <Label Text="4444"
           HorizontalOptions="Center"
           VerticalOptions="Center"
           AbsoluteLayout.LayoutBounds="0.85,0.1,60,40"
           AbsoluteLayout.LayoutFlags="XProportional,YProportional"
           TextColor="Silver"
           FontFamily="RobotoMedium"
           FontSize="16"
           FontAttributes="Bold"/>
    <Label Text="1111"
           HorizontalOptions="Center"
           VerticalOptions="Center"
           AbsoluteLayout.LayoutBounds="0.1,0.12,40,40"
           AbsoluteLayout.LayoutFlags="XProportional,YProportional"
           TextColor="Silver"
           FontFamily="RobotoMedium"
           FontSize="6"
           FontAttributes="Bold"/>
    <Label Text="J. Andrade"
           HorizontalOptions="Center"
           VerticalOptions="Center"
           AbsoluteLayout.LayoutBounds="0.25,0.145,60,40"
           AbsoluteLayout.LayoutFlags="XProportional,YProportional"
           TextColor="Silver"
           FontFamily="RobotoMedium"
           FontSize="12"
           FontAttributes="Bold"/>
    <Label Text="VÁLIDA HASTA"
           HorizontalOptions="Center"
           VerticalOptions="Center"
           AbsoluteLayout.LayoutBounds="0.52,0.145,20,10"
           AbsoluteLayout.LayoutFlags="XProportional,YProportional"
           TextColor="Silver"
           FontFamily="RobotoMedium"
           FontSize="4"
           FontAttributes="Bold"/>
    <Label Text="06/23"
           HorizontalOptions="Center"
           VerticalOptions="Center"
           AbsoluteLayout.LayoutBounds="0.654,0.140,60,20"
           AbsoluteLayout.LayoutFlags="XProportional,YProportional"
           TextColor="Silver"
           FontFamily="RobotoMedium"
           FontSize="12"
           FontAttributes="Bold"/>
</AbsoluteLayout>

![](

Cada día es mejor!

Asi quedo mi diseño

Hola a todos! Así quedó mi diseño, muy interesante la clase. ![](https://static.platzi.com/media/user_upload/image-e52aba17-9489-4c4d-badc-334854314873.jpg)

lo comparto por google drive pero no se ve.

Mi diseño. Ambos, la tarjeta y el cuadro gris fueron hechos con AbsoluteLayout, solo que la tarjeta de fondo usé BoxView.

Hola!, este es mi diseño: ![](https://static.platzi.com/media/user_upload/image-346a753e-5f0e-4f44-94f1-1b3bd92def6a.jpg) Todo fue hecho con Xaml sin imágenes, si gustan les dejo el código: ` <AbsoluteLayout HorizontalOptions="CenterAndExpand">` ` <Frame BackgroundColor="#00005B"` ` AbsoluteLayout.LayoutBounds="1,300,350,175"` ` CornerRadius="15"` ` BorderColor="#00005B"` ` HasShadow="True">` ` <Frame.Shadow>` ` <Shadow Brush="Black"` ` Offset="20,20"` ` Radius="10"` ` Opacity="0.6"/>` ` </Frame.Shadow>` ` </Frame>` ` ` ` <Label Text="Tarjeta Dígital"` ` TextColor="White"` ` AbsoluteLayout.LayoutBounds="10,310"` ` FontSize="Medium"/>` ` ` ` <Frame Margin="0"` ` Padding="5,1,5,1"` ` BackgroundColor="#0e077d"` ` Opacity="0.7"` ` BorderColor="#2b16c0"` ` AbsoluteLayout.LayoutBounds="40,350">` ` <Label Text="1111"` ` TextColor="White"` ` FontSize="Medium"/>` ` </Frame>` ` ` ` <Frame Margin="0"` ` Padding="5,1,5,1"` ` BackgroundColor="#0e077d"` ` Opacity="0.7"` ` BorderColor="#2b16c0"` ` AbsoluteLayout.LayoutBounds="110,350">` ` <Label Text="2222"` ` TextColor="White"` ` FontSize="Medium"/>` ` </Frame>` ` ` ` <Frame Margin="0"` ` Padding="5,1,5,1"` ` BackgroundColor="#0e077d"` ` Opacity="0.7"` ` BorderColor="#2b16c0"` ` AbsoluteLayout.LayoutBounds="180,350">` ` <Label Text="3333"` ` TextColor="White"` ` FontSize="Medium"/> ` ` </Frame>` ` ` ` <Frame Margin="0"` ` Padding="5,1,5,1"` ` BackgroundColor="#0e077d"` ` Opacity="0.7"` ` BorderColor="#2b16c0"` ` AbsoluteLayout.LayoutBounds="250,350">` ` <Label Text="4444"` ` TextColor="White"` ` FontSize="Medium"/>` ` </Frame>` ` ` ` <Label Text="Daniel Liévano Rodríguez"` ` TextColor="White"` ` AbsoluteLayout.LayoutBounds="20,445"` ` FontSize="Small"/>` ` ` ` ` ` <Label Text="Expired Date"` ` TextColor="White"` ` FontSize="Micro"` ` AbsoluteLayout.LayoutBounds="160,395"/>` ` ` ` <Label Text="09/25"` ` TextColor="White"` ` FontSize="Large"` ` AbsoluteLayout.LayoutBounds="200,395"/>` ` ` ` <Frame BackgroundColor="red"` ` CornerRadius="100"` ` Opacity="0.7"` ` BorderColor="Red"` ` AbsoluteLayout.LayoutBounds="275,420,40,40"` ` ></Frame>` ` <Frame BackgroundColor="Yellow"` ` BorderColor="Yellow"` ` CornerRadius="100"` ` AbsoluteLayout.LayoutBounds="300,420,40,40"` ` Opacity="0.7"></Frame>` ` ` ` <Frame BackgroundColor="silver"` ` BorderColor="Silver"` ` AbsoluteLayout.LayoutBounds="15,390,30,20"` ` CornerRadius="1">` ` ` ` </Frame>` ` </AbsoluteLayout>` `</ContentPage>`
Cuando le agrego el "AbsoluteLayout.LayoutFlags=All" No se ven las lineas, por lo que cambien los BoxView 2,3 y 4 a BackgroundColor="Black" para que se vean ![](https://static.platzi.com/media/user_upload/image-160d3210-e256-493f-9beb-6add22eb8de2.jpg)
![](https://static.platzi.com/media/user_upload/image-ab707a4b-58d5-43d5-963e-97ad7fa45dfe.jpg) 😎👍
Asi deje mi diseño ![](https://static.platzi.com/media/user_upload/image-d72eb85f-97a3-4936-ab78-a7bc74d8de7d.jpg)
```js <AbsoluteLayout HorizontalOptions="CenterAndExpand"> <Image Source="creditcard.png" AbsoluteLayout.LayoutBounds="1,0,350,300" AbsoluteLayout.LayoutFlags="PositionProportional"></Image> <Label AbsoluteLayout.LayoutBounds=".10,.20,60,40" AbsoluteLayout.LayoutFlags="XProportional,YProportional" HorizontalTextAlignment="Center" TextColor="Black" Text="1111" FontAttributes="Bold"></Label> <Label AbsoluteLayout.LayoutBounds=".35,.20,60,40" AbsoluteLayout.LayoutFlags="XProportional,YProportional" HorizontalTextAlignment="Center" TextColor="Black" Text="1111" FontAttributes="Bold"></Label> <Label AbsoluteLayout.LayoutBounds=".60,.20,60,40" AbsoluteLayout.LayoutFlags="XProportional,YProportional" HorizontalTextAlignment="Center" TextColor="Black" Text="1111" FontAttributes="Bold"></Label> <Label AbsoluteLayout.LayoutBounds=".85,.20,60,40" AbsoluteLayout.LayoutFlags="XProportional,YProportional" HorizontalTextAlignment="Center" TextColor="Black" Text="1111" FontAttributes="Bold"></Label> <Label AbsoluteLayout.LayoutBounds=".20,.25,200,40" AbsoluteLayout.LayoutFlags="XProportional,YProportional" HorizontalTextAlignment="Center" TextColor="Black" Text="Nombre del dueno fantasma" FontAttributes="Bold"></Label> </AbsoluteLayout> ```![](https://i.ibb.co/RCwcH6c/1.png)
![](https://static.platzi.com/media/user_upload/image-ab52424d-4b1b-443e-81d4-8669231f6eff.jpg)

Reto cumplido

Reto

Agregue un entry para poder digitar los numeros de la tarjeta

Este es mi diseño. ![](https://static.platzi.com/media/user_upload/imagen-cd8aaf0f-3337-4390-8784-ad93e130461a.jpg)
Aqui mi dieño; ![](https://static.platzi.com/media/user_upload/image-d432359f-539e-43b3-a514-d10606c3e0d2.jpg)