2012-05-01 126 views
25

我有RelativeLayout的经验,但我从来没有碰到过解决我提出的问题的方法(除了硬编码的边距值,我想要的为了避免)Android RelativeLayout对齐另一个视图右上角的一个视图的中心

我想尝试创造一些像在RelativeLayout的下面的图片:

enter image description here

这个盒子是自己的看法,我希望得到一个包含橙色圆圈查看以包含蓝色框的视图的右上角为中心。

我试着用android:alignTop="boxView"android:alignRight="boxView",但是把我的橙色圆圈完全放在我的箱子里。我希望它是这样的,使得圆圈在盒子右上角上方居中。

任何人都知道我可以通过RelativeLayout获得结果吗?优选地,不必为了橙色点视图而远离屏幕边缘硬编码页边距。

+0

为什么你不想为此使用保证金。保证金似乎是完成此任务的完美方式。 – Bobbake4

+0

我只是不想让它离屏幕边缘有多远。如果我可以将它与盒子对齐,然后将它的直径向上和向上调整一个实际上最理想的边距。但是我只能通过告诉它离屏幕边缘多远来做到这一点,而不是离我想要对齐的点有多远。 – FoamyGuy

回答

29

此代码创建您正在查找的内容,但使用边距。现在,如果这是您正在创建的动态结构,则可以在代码中设置保证金。正如你所看到的,我使用负边距将蓝色框外部的右上角形状移开。这些需要是您尝试移动的圆圈的一半高度。您可以通过代码完成所有这些操作,将圆圈居中在右上角。

<?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

不知道负边距。非常感谢你。 – FoamyGuy

+0

请注意,如果第二个视图的大小是由图像决定的,则这不起作用,因为drawable在DP中没有一致的大小(它们的大小以像素为单位从一个DPI桶跳到下一个DPI桶而不是连续缩放)。所以你不能只做26dp/2 = 13dp。 一种解决方法是选择一个绝对大于图像的尺寸,并在该视图周围添加具有该确定尺寸的包装布局(以原始视图为中心),然后可以计算其一半。 – Karu

+0

负边距!是! – RexSplode

相关问题