Android LinearLayout 水平方向时如何使小部件垂直居中?

How to center widgets vertically when orientation is horizontal for an Android LinearLayout?

我在 Android ListView 中有几种不同的项目视图类型,每种类型都有自己的 LinearLayout。除了相对于彼此水平放置之外,我还试图将它们的所有小部件垂直居中。请参阅所附图片中 ListView 中的第一项。它看起来不错,只是小部件被推到了 ListView 项目的顶部附近。

TextView 和 ImageView 的浅蓝色和浅绿色背景旨在帮助查看 xml 对放置的影响。图像正下方是我在 ListView 中最顶层项目的布局。如何使 TextView 以及圆形图像 (ImageView) 垂直居中?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:paddingBottom="5dp">

        <TextView
            android:id="@+id/ques_num"
            android:layout_width="30dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="2dp"
            android:layout_marginRight="2dp"
            android:layout_marginTop="2dp"
            android:layout_marginBottom="2dp"
            android:background="@color/LightBlue"
            android:text="0."
            android:textSize="22sp" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:layout_gravity="center_vertical"
            android:background="@color/LightGreen"
            android:adjustViewBounds="true"
            android:id="@+id/question_id_0" />
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:layout_gravity="center_vertical"
            android:background="@color/LightGreen"
            android:adjustViewBounds="true"
            android:id="@+id/question_id_1" />
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:layout_gravity="center_vertical"
            android:background="@color/LightGreen"
            android:adjustViewBounds="true"
            android:id="@+id/question_id_2" />
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:layout_gravity="center_vertical"
            android:background="@color/LightGreen"
            android:adjustViewBounds="true"
            android:id="@+id/question_id_3" />
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:layout_gravity="center_vertical"
            android:background="@color/LightGreen"
            android:adjustViewBounds="true"
            android:id="@+id/question_id_4" />


</LinearLayout>

更新:

我尝试简单地添加到 LinearLayout:

android:gravity="center_horizontal"

然后尝试将其更改为:

android:gravity="center_horizontal|center_vertical"

在这两种情况下,它都会将小部件移动到 ListView 项目的水平中心,但对垂直定位没有影响。在图片中查看结果:

将其添加到水平方向的 LinearLayout

android:gravity="center_horizontal"

整个问题是 LinearLayout 中这一行的组合:

android:paddingBottom="5dp"

事实上,鉴于 TextView 和 ImageView 对象中内容的大小,ListView 项目的上边界和下边界已经尽可能多地压入。由于 paddingBottom 属性,即使看起来有,也没有进行居中调整的空间。