我们说我有两个想要垂直居中的视图。第一个视图比第二个视图大。
我注意到,如果我将这两个视图放在RelativeLayout
内,其中包含属性layout_height="wrap_content"
和android:gravity="center_vertical"
,则不会发生任何事情。这就是我得到的:
相反,如果我将这两个视图放在LinearLayour
内,其中包含属性layout_height="wrap_content"
和android:gravity="center_vertical"
,则视图会垂直居中:
最后,如果我将这两个视图放在RelativeLayout
内,其中属性layout_height
具有固定的高度android:gravity="center_vertical"
,我会得到与LinearLayout
相同的结果。视图垂直居中。
我希望视图在每种情况下都是垂直居中的。你知道为什么会有这种差异吗?
答案 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:gravity
对RelativeLayout
的行为有点随机。我会避免使用is。