2012-05-01 22 views
25

Tengo experiencia con RelativeLayout, pero nunca me encontré con una manera de resolver el problema que me presentan (aparte de los valores de margen de codificación difícil, que quiero . para evitar)Android RelativeLayout alinear el centro de una vista en la esquina superior derecha de otra vista

Quiero tratar de crear algo parecido a la siguiente imagen en un RelativeLayout:

enter image description here

la caja es su propio punto de vista y quiero obtener la vista que contiene el círculo de color naranja para centrarse en la esquina superior derecha de la Vista que contiene el cuadro azul.

Intenté con android:alignTop="boxView" y android:alignRight="boxView" pero eso puso mi círculo naranja completamente dentro de mi caja. Quiero que sea así para que el círculo esté centrado sobre la esquina superior derecha de la caja.

¿Alguien sabe cómo puedo obtener ese resultado con RelativeLayout? preferiblemente sin tener que codificar los márgenes lejos del borde de la pantalla para la vista de puntos naranja.

+0

¿Por qué no desea utilizar el margen para esto. El margen parece ser la forma perfecta de lograr esto. – Bobbake4

+0

Solo que no quiero darle un margen de qué tan lejos del borde de la pantalla. Si pudiera alinearlo con la caja y luego desplazarlo hacia arriba y hacia arriba por la mitad de su diámetro con un margen que sería ideal en realidad. Pero solo puedo descubrir cómo hacerlo diciéndole qué tan lejos está el borde de la pantalla, en lugar de qué tan lejos del punto que quiero alinear. – FoamyGuy

Respuesta

29

Este código crea lo que está buscando pero utiliza márgenes. Ahora puede establecer el margen en el código si esta es una estructura dinámica que está creando. Como puede ver, utilicé márgenes negativos para mover la forma superior derecha fuera del cuadro azul. Estos deben ser la mitad de la altura del círculo que está tratando de mover. Puedes hacer todo esto en código para centrar el círculo en la esquina superior derecha.

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 

     <LinearLayout 
      android:id="@+id/linearLayout1" 
      android:layout_width="100dp" 
      android:layout_height="100dp" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentLeft="true" 
      android:background="#0000FF" 
      android:orientation="vertical" > 
     </LinearLayout> 

     <LinearLayout 
      android:layout_width="26dp" 
      android:layout_height="26dp" 
      android:layout_alignRight="@+id/linearLayout1" 
      android:layout_alignTop="@+id/linearLayout1" 
      android:layout_marginRight="-13dp" 
      android:layout_marginTop="-13dp" 
      android:background="#FF00FF" 
      android:orientation="vertical" > 
     </LinearLayout> 

    </RelativeLayout> 
+3

No sabía acerca de los márgenes negativos. Perfecto, gracias. – FoamyGuy

+0

Tenga en cuenta que esto realmente no funciona si la segunda vista está dimensionada por una imagen, ya que los dibujables no tienen un tamaño constante en DP (su tamaño en píxeles salta de un depósito de DPI al siguiente en lugar de escalar continuamente). Entonces no puedes hacer 26dp/2 = 13dp. Una solución es elegir un tamaño que sea definitivamente más grande que la imagen y agregar un diseño de envoltura alrededor de la vista con ese tamaño definido (con la vista original centrada en él), luego puede calcular la mitad. – Karu

+0

¡Márgenes negativos! ¡Sí! – RexSplode

Cuestiones relacionadas