android:gravity =" center_vertical"的行为差异对于RelativeLayout和LinearLayout

时间:2016-10-02 12:48:30

标签: android android-layout

我们说我有两个想要垂直居中的视图。第一个视图比第二个视图大。

我注意到,如果我将这两个视图放在RelativeLayout内,其中包含属性layout_height="wrap_content"android:gravity="center_vertical",则不会发生任何事情。这就是我得到的:

enter image description here

相反,如果我将这两个视图放在LinearLayour内,其中包含属性layout_height="wrap_content"android:gravity="center_vertical",则视图会垂直居中:

enter image description here

最后,如果我将这两个视图放在RelativeLayout内,其中属性layout_height具有固定的高度android:gravity="center_vertical",我会得到与LinearLayout相同的结果。视图垂直居中。

我希望视图在每种情况下都是垂直居中的。你知道为什么会有这种差异吗?

3 个答案:

答案 0 :(得分:1)

LinearLayout根据其方向(水平或垂直)处理其所有子对象。所以当你说重力时:“center_vertical”。您实际上是根据父布局引用的。

在RelativeLayout的情况下,它允许您指定子对象相对于彼此的位置(子B的左侧的子A)或父对象的位置(与父对象的顶部对齐)。

就个人而言,我只会在LinearLayouts中使用重力,而在RelativeLayouts中使用centerInParent。

答案 1 :(得分:0)

在第一种情况下,如果您将RelativeLayout用于您想要居中的子视图,它将与android:layout_centerVertical="true"一起使用。

因此,对于LinearLayout,您需要先指定orientation(即水平/垂直),以便根据父布局的引用来扩充子视图。

RelativeLayout中,正如名称所说的那样,您可以指定相对于父RelativeLayout的子视图的位置。

现在,您想要实现的视图也可以通过许多其他方式生成。

例如,将您的父布局设置为LinearLayout。不要在父布局中指定任何gravity属性。因此,您将子layout_gravity属性设置为certer_vertical,这也应该有效。

答案 2 :(得分:0)

好吧,经过其他一些测试后,似乎android:gravityRelativeLayout的行为有点随机。我会避免使用is。