Android 带有“空”项的垂直线性布局中的垂直居中视图

Android 带有“空”项的垂直线性布局中的垂直居中视图,android,android-layout,textview,Android,Android Layout,Textview,我有两个文本视图子项的垂直线性布局。 我希望孩子们垂直居中,即使只有一个孩子实际上填满了空间 下面是一个测试布局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="60dp" android:orientation="vertical" andr

我有两个文本视图子项的垂直线性布局。 我希望孩子们垂直居中,即使只有一个孩子实际上填满了空间

下面是一个测试布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:orientation="vertical"
    android:gravity="center_vertical|left"
    android:background="@color/light_gray" >
    <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" 
        android:text="text text text" >
    </TextView>
    <TextView
        android:id="@+id/tv2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>
如图所示设置tv2视图时,tv1不会垂直居中。 下面是它的外观:请看tv2“填充空间”,尽管它没有任何文本

而我想要的是:

这实际上是当tv2从布局中移除时发生的情况

顺便说一句,
我想避免使用visibility属性,我知道我可以设置为GONE

一旦我确定你做得正确,并且根据评论它仍然不适用于你,我会立即删除它,但我想再次检查你是否真的将事情设置正确

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:orientation="vertical"
    android:gravity="center"
    android:weightSum="2"
    android:background="@color/light_gray" >
    <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="center_vertical"
        android:text="text text text" >
    </TextView>
    <TextView
        android:id="@+id/tv2"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="center_vertical" />
</LinearLayout>
这应该是你的布局。你有这样的设置吗

您明确声明根线性布局高度为60dp。我不建议这样做,但如果你打算保持这种方式,你也可以简单地明确声明你的TextView高度,比如

<TextView
    android:layout_width="wrap_content"
    android:layout_height="30dp"
    android:gravity="center_vertical" />
请让我知道,当你检查并确保这是不工作的

编辑

这将把你的文本视图放在你的布局中间,不管这些文本视图中实际上是什么:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:background="@color/light_gray" >

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_centerInParent="true" >

        <TextView
            android:id="@+id/tv1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content
            android:gravity="center_vertical"
            android:text="text text text" >
        </TextView>

        <TextView
            android:id="@+id/tv2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_vertical" />

    </LinearLayout>
</RelativeLayout>

更改文本视图,将其高度设置为0dp,将其权重设置为1,并检查其是否有效。0dp是非法的,仅对版面宽度合法,将权重设置为1.0不起作用,因为tv2实际上发生了,这是向后的问题,如果方向是垂直的,则版面高度=0dp,如果它是水平的,那么布局宽度=0dp是可以接受的。请确保为每个文本视图适当设置权重。两个文本视图都需要布局高度为0dp和布局重量为1。@SagiLow:布局高度和布局宽度都允许使用0dp。好的,你说得对,设置权重是合法的,但它不起作用,tv1不在布局顶部。谢谢帮助,复制并粘贴到布局,图形布局再次显示它没有垂直居中。@如果它没有垂直居中?我不知道为什么。重力属性应该可以管理这一点。有没有办法在帖子中发布一个屏幕截图来描述正在发生的事情?@SagiLow,垂直居中。第二个文本视图中没有任何文本,但由于您要求的权重参数,它仍然占据高度的1/2。第一个文本视图将在布局的上半部分垂直居中,而第二个文本视图将在下半部分垂直居中。我没有要求权重,我根据此线程中的建议将其放在那里,我的目标是我在问题图像上发布的内容,如果不使用visibility=gone,这可能是不可能的,这没关系,但根据您的说法,这是可能的,但它还没有出现。@SagiLow我认为我们误解了您的问题,因为您的提问方式。这就是我们建议使用重量的原因。