una studio que linearlayout imagen español elementos developers debajo como centro centrar boton alinear android android-layout android-relativelayout android-framelayout

que - relativelayout android studio español



RelativeLayout alinea padre*lado*+ margen*lado* (1)

¿Por qué debería ser sólo parcialmente visible?

Agregué 130dp de margen en cada dirección de alineación de los padres. Eso significa que la vista debe ser solo parcialmente visible en el diseño

El cuadro se está reduciendo porque se da preferencia a mantenerlo dentro del diseño principal a toda costa, mientras se aplica el margen. Como la vista secundaria más pequeña es 50dp, ha agregado un margen de 130dp , el ancho total que necesita es 180dp pero la vista principal en sí tiene solo 150dp ancho. Eso es 130dp + 50dp > 150dp : el elemento secundario más el margen no pueden caber dentro del elemento primario.

Esta es una "entrada tonta" y el intérprete XML está haciendo todo lo posible para representar algo. La decisión que toma al final es que puede alterar el ancho de la caja secundaria y seguir respetando la restricción de margen. O matemáticamente

130dp + 20dp == 150dp

Básicamente, reduce el ancho del recuadro interno desde los 50dp a los 20dp asignados para que pueda caber dentro del padre con su margen agregado. Y si nos fijamos en el tamaño del cuadrado, 20dp ve bien. Es un 60% más pequeño.

Este es un comportamiento inteligente por parte del intérprete porque a medida que cambian los tamaños de pantalla y se ejecuta en problemas como este, siempre debe conservar la restricción de margen en oposición a la restricción de ancho.

En resumen, el intérprete está haciendo todo lo posible para ajustarse a la caja, y su margen dentro de su padre, para hacerlo, está reduciendo la caja. Es elegir conservar el margen dado, sobre el ancho dado, probablemente debido a la disposición principal superior.

Cuando dice "esto debería ser parcialmente visible", asumo que usted cree que el niño se representará la mitad dentro de los límites principales y la mitad fuera de los límites principales, similar al desarrollo de ventanas. Sin embargo, este no es el caso porque siempre intentará mantener a los niños dentro de los límites de los padres en la mayoría de los diseños.

Las elecciones que se realizan también dependen del diseño primario superior, algunos diseños pueden preferir conservar el ancho del cuadro secundario en lugar del margen, o incluso representar el cuadro fuera de los límites del padre.

En el segundo caso:

Así que les di 151dp de margen en las direcciones alineadas.

Va más allá del punto en el que el intérprete puede reducir la imagen. No se puede reducir la imagen a negativo 1. Eso es

50dp + 151dp > 150dp

No puede cumplir con esta restricción de margen que le ha dado, por lo que el comportamiento es bastante impredecible. En una suposición, diría que sabe que no puede mantener ambas imágenes, junto con sus márgenes dentro del padre. Así que simplemente hace uno dentro y otro fuera.

Una vez más, esta es una entrada tonta y el intérprete está haciendo todo lo posible para representar lo que usted desea.

¿Alguien puede explicar la diferencia de comportamiento y el efecto de margen negativo opuesto?

Un margen negativo hará diferentes cosas dependiendo del tipo de diseño en su elemento primario, y también se alineará. En un diseño de marco se comportará de manera diferente a un diseño relativo. Generalmente, si está buscando diseños negativos, ha elegido los contenedores principales incorrectos y está intentando piratearlos para que se vean bien.

No sé qué está intentando hacer exactamente, pero tal vez solo necesite modificar un poco su proceso de pensamiento y pensar en la mala interpretación que intenta entender el XML que le da.

No serías la primera persona en confundirte por completo con los diseños XML de Android. Anidar diseños dentro de diseños siempre es confuso y el comportamiento cambia dependiendo de una serie de cosas como márgenes, alineaciones, anchos, etc. .

En resumen, evite jugar con márgenes (como flash o winforms) y juegue sin tipos de diseño en lugar de tener las cosas donde las desea.

Espero que ayude, lo siento por tl; dr.

He notado un comportamiento extraño en RelativeLayout al alinear una vista con el lado del diseño (cualquier lado) y tener un gran margen en la misma dirección.

Tengo 2 RelativeLayouts que cada uno contiene una vista simple. En un diseño, la vista se alinea en la parte superior e izquierda, en la otra, en la parte inferior y derecha:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <RelativeLayout android:layout_width="150dp" android:layout_height="150dp" android:layout_marginTop="110dp" android:layout_gravity="center" android:background="#ff555555" > <View android:layout_width="50dp" android:layout_height="50dp" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:background="#aa8711" /> </RelativeLayout> <RelativeLayout android:layout_width="150dp" android:layout_height="150dp" android:layout_marginBottom="110dp" android:layout_gravity="center" android:background="#ff555555" > <View android:layout_width="50dp" android:layout_height="50dp" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:background="#998877" /> </RelativeLayout> </FrameLayout>

Se parece a esto:

Agregué 130dp de margen en cada dirección de alineación de los padres. Eso significa que la vista debe ser solo parcialmente visible en el diseño. Esto es lo que pasa:

Como puede ver, las vistas ahora son más pequeñas que el tamaño original, ya que se insertan en las "paredes" del diseño. Luego intenté dar un margen más grande que el diseño, así que les di 151dp de margen en las direcciones alineadas. Se veía así:

La vista alineada de abajo a la derecha ahora "rompe" el diseño y vuelve a tener el mismo tamaño que tenía originalmente. Por otro lado, la vista alineada superior izquierda también está en su tamaño original, pero completamente dentro del diseño en lugar de fuera de él.

He intentado esto individualmente y en cada permutación de alineación y obtuve los mismos resultados.

Pregunta uno: ¿Puede alguien explicar este comportamiento inconsistente?

Intenté lo mismo, esta vez comparando el comportamiento con el de un FrameLayout . Configuración inicial:

y después de márgenes:

FrameLayout mantiene la vista en su tamaño original en todo momento y simplemente permite que la vista "salga" de ella. Intenté dar un margen negativo en la dirección opuesta de al menos el tamaño de la vista que debería estar fuera de RelativeLayout y vi el mismo comportamiento que ocurre en FrameLayout de forma predeterminada.

Pregunta 2: ¿Puede alguien explicar la diferencia de comportamiento y el efecto de margen negativo opuesto?