layout_gravity="center_vertical" 不工作

Ala*_*ACK 2 android

我的问题

我似乎无法弄清楚为什么android:layout_gravity="center_vertical"在我的情况下不起作用。

请注意,我对解决使其垂直对齐的问题不感兴趣,以至于出于教学原因,我试图确切地了解这种行为本身的原因是什么。

我的代码

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.LinearLayoutCompat
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"

    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/blue_100">

    <android.support.v7.widget.AppCompatTextView
        android:background="@color/red_100"

        android:text="HELLO WORLD"
        android:textSize="18sp"
        android:textColor="@color/black"

        android:gravity="center_vertical"
        android:maxLines="2"

        android:layout_gravity="center_vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</android.support.v7.widget.LinearLayoutCompat>
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Ben*_* P. 5

一个LinearLayoutvertical方向会忽略垂直分量任何孩子的android:layout_gravity属性。同样,LinearLayouthorizontal定位将忽略水平分量孩子的android:layout_gravity

对于center重力值的特殊情况,知道这与 的行为相同center_horizontal|center_vertical,直到常量的实际整数值(0x11 vs 0x01|0x10)是有帮助的。因此,android:layout_gravity="center"在垂直线性布局中使用将等同于android:layout_gravity="center_horizontal".

至于为什么,考虑一下:

<LinearLayout orientation=vertical>

    <View layout_gravity=top/>
    <View layout_gravity=bottom/>

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

你会在这里做什么?如果您将第一个视图放置在屏幕顶部,将第二个视图放置在屏幕底部,那么您就不是真正的线性布局。

即使你说你对如何解决问题不感兴趣,你也可以通过android:gravity属性LinearLayout本身来解决。这将导致LinearLayout在线性布局的顶部、中心或底部将所有视图堆叠在一起。