【问题标题】:Difference in behavior of android:gravity="center_vertical" for RelativeLayout and LinearLayoutRelativeLayout 和 LinearLayout 的 android:gravity="center_vertical" 行为差异
【发布时间】:2016-10-02 12:48:30
【问题描述】:

假设我有两个要垂直居中的视图。第一个视图比第二个视图大。

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

相反,如果我将这两个视图放在具有layout_height="wrap_content"android:gravity="center_vertical" 属性的LinearLayour 中,则视图垂直居中:

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

我希望在每种情况下视图都垂直居中。你知道造成这种差异的原因吗?

【问题讨论】:

标签: android android-layout


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    所以在LinearLayout 的情况下,您需要首先指定orientation(即水平/垂直),以便子视图根据您的父布局的引用进行膨胀。

    虽然在RelativeLayout 中,顾名思义,您可以指定相对于作为父RelativeLayout 的子视图的视图的位置。

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2011-03-20
        • 2012-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-01
        相关资源
        最近更新 更多