来自另一个View的Android RelativeLayout alignCenter

Foa*_*Guy 26 android alignment android-relativelayout

我有一个RelativeLayout有两个孩子,也RelativeLayout包含几个按钮和东西.这些子布局不是在我的主布局中居中,主布局确实包含了这两个方面的一些其他东西.我希望第一个在第二个之上.这很容易,只需android:layout_below="@+id/firstLayout"在第二个使用.但我也希望第二个在第一个的中心对齐.我的意思是我想要第二个布局找到第一个布局的中心,并对齐自己,使其中心位于相同的x位置.我明白了alignLeft, alignRight, alignTop, and alignBaseline,但没有中心.是否可以这样做而不必硬编码边距来扫描第二个布局?

这是我想要最终得到的一个粗略的例子,蓝色条将是第一个布局,红色框将是第二个布局.我知道我可以将它们包装在另一个RelativeLayout大小相等的区域中"wrap_content",然后centerHorizontal="true"用于第二个区域.但我真的宁愿把两个都留作我的主要布局的孩子(如果我让他们成为一个单独布局的孩子,我将不得不对我的应用程序的某些部分的工作方式进行一些更改.我试图避免这种情况.)

我想要的例子

Max*_*xim 9

如果您可以将父布局的宽度设置为"wrap_content",则可以将两个子布局设置为居中

  • 所以你让我思考它.我甚至不认为我需要使用额外的父布局.我可以使用底部布局上的alignLeft和alignRight,这样它的宽度与顶部相同,然后使用gravity ="centerHorizo​​ntal"就可以了 (7认同)
  • 我认为你的意思是宽度.但是这种方法不起作用,因为父布局中还有其他内容.这两个孩子实际上是在父母的一边. (2认同)

hta*_*oya 5

有时您可以将alignLeft和设置alignRight为所需的视图,然后在您想要居中的元素上使用重力。

例如:

android:layout_below="@+id/firstLayout"
android:layout_alignLeft="@+id/firstLayout"
android:layout_aligntRight="@+id/firstLayout"
android:gravity="center"
Run Code Online (Sandbox Code Playgroud)

如果组件不是 a TextView(或不需要背景的视图),则可以将其包装在FrameLayout具有上述属性的 a 中。

<MyView id="@+id/firstLayout" .. other props/>

<FrameLayout 
    ... other props
    android:layout_below="@+id/firstLayout"
    android:layout_alignLeft="@+id/firstLayout"
    android:layout_aligntRight="@+id/firstLayout"
    android:gravity="center" >

    <MyView id="@+id/myAlignedView" ..other props />

</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

这样,底部视图将是一个与上部视图宽度相同的 Frame,但在其内部将有一个以宽度为中心的视图。

当然,这仅在您知道哪个是更大的视图时才有效。如果不是,正如 Laranjeiro 所回答的那样,将两个内容包装在另一个具有中心重力的布局中。