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 属性,即使看起来有,也没有进行居中调整的空间。
我在 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 属性,即使看起来有,也没有进行居中调整的空间。