【问题标题】:The difference between vertical and horizontal orientation about layout_gravity and gravity关于layout_gravity和gravity的垂直和水平方向的区别
【发布时间】:2020-09-05 14:47:31
【问题描述】:

我在 LinearLayout 中有一个 TextView。

我想尝试不同的layout_gravity和gravity模式。

我有这个代码:

<LinearLayout
    android:layout_width="150dp"
    android:layout_height="50dp"
    android:background="#A55C93"
    android:orientation="horizontal">
    <TextView
        android:id="@+id/textView1"
        android:background="#005Cff"
        android:layout_gravity="center"
        android:gravity="center"
        android:layout_width="50dp"
        android:layout_height="25dp"
        android:text="text"
        android:textSize="21sp" />
</LinearLayout>

当我拥有android:orientation="vertical" 时,关于layout_gravitygravity 的一切都是有意义的。但是当我有android:orientation="horizontal"时,输出与第一个不同,为什么?

【问题讨论】:

    标签: android gravity layout-gravity


    【解决方案1】:

    要理解的主要是子视图上的layout_gravity 是一个属性,它将“向上”传达给父级,并“要求”父级以某种方式行事。

    在这种情况下,父级是LinearLayout,它有一个不同的属性(orientation),它已经影响了子视图的定位。因此,当孩子指定layout_gravity 时,会发生什么取决于LinearLayoutorientation

    • 对于horizontal LinearLayout,子级layout_gravity 的任何水平分量都将被忽略。
    • 对于vertical LinearLayout,子级layout_gravity 的任何垂直分量都会被忽略。

    您正在使用center,基本上是center_vertical + center_horizontal。所以对于水平的LinearLayout,水平居中将被忽略。而且,对于垂直 LinearLayout,垂直居中将被忽略。

    鉴于您的示例只有一个子视图,您可以考虑将父视图 LinearLayout 替换为 FrameLayout。那么孩子layout_gravity就会得到充分的尊重。

    【讨论】:

      【解决方案2】:

      试试这段代码,你会发现不同 增加布局高度以查看差异;它将帮助您更好地理解流程

      当您将重心设置为水平线性布局时,中心不是指水平中心,而是指垂直中心。

      我知道这听起来令人困惑,但试试这段代码,你会更好地理解我想说什么。

      <LinearLayout
      android:layout_width="150dp"
      android:layout_height="500dp"
      android:background="#A55C93"
      android:orientation="horizontal"
      >
      <TextView
          android:id="@+id/textView1"
          android:background="#005Cff"
          android:layout_gravity="center"
          android:layout_width="50dp"
          android:layout_height="25dp"
          android:text="text"
          android:textSize="21sp"
          />
      </LinearLayout>
      

      也可以垂直试试这个

      <LinearLayout
      android:layout_width="150dp"
      android:layout_height="500dp"
      android:background="#A55C93"
      android:orientation="vertical"
        tools:ignore="MissingConstraints"
      
        >
      <TextView
          android:id="@+id/textView1"
          android:background="#005Cff"
          android:layout_gravity="center"
          android:layout_width="50dp"
          android:layout_height="25dp"
          android:text="text"
          android:textSize="21sp"
          />
      </LinearLayout>
      

      尝试在布局中添加多个视图,这将帮助您给出准确的想法。 换句话说,在水平方向的线性布局中,如果您设置布局重心,则会将您的视图对齐在线性布局的高度中心,如果您将布局重心设置为垂直对齐的线性布局,它会将您的视图中心对齐到线性布局的宽度

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多