Android:如何在TableLayout列中居中视图?

13

我正在尝试创建一个TabLayout,并带有一组复选框的网格。顶部有两个标题,每个附加行都由标签和两个复选框组成。我希望表格填满所有可用空间,第一列向左对齐,复选框及其标题在它们的列中居中。在下面的布局中,标题看起来已经正确居中,但是复选框没有。我在其中一个复选框上添加了背景颜色,这说明复选框实际上已经扩展到填充其列(这就是为什么它无法居中);尽管使用了“wrap_content”布局参数。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:orientation="vertical">
    <TableLayout 
        android:stretchColumns="1,2"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <TableRow>
            <TextView 
                android:text="" 
                android:gravity="center_horizontal"
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content">
            </TextView>
            <TextView 
                android:text="First category" 
                android:gravity="center_horizontal"
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content">
            </TextView>
            <TextView 
                android:text="2nd category" 
                android:gravity="center_horizontal"
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content">
            </TextView>
        </TableRow>
        <TableRow>
            <TextView 
                android:text="Row 1: " 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content">
            </TextView>
            <CheckBox
                android:background="#FF001122"
                android:layout_height="50dip"
                android:layout_width="wrap_content" 
                android:gravity="center_horizontal">
            </CheckBox>
            <CheckBox
                android:layout_height="50dip"
                android:layout_width="wrap_content" 
                android:gravity="center_horizontal">
            </CheckBox>
        </TableRow>
    </TableLayout>
</LinearLayout>

这里输入图片描述


你想把复选框放在分类的中心位置,对吗? - Venky
2个回答

26

在 CheckBox 上,您要设置 android:layout_gravity="center_horizontal" 而不是设置 android:gravity="center_horizontal"

android:gravity 控制视图在其容器内部布局内容的方式,由于您将宽度设置为 "wrap_content",因此没有空间让复选框在其中居中。

android:layout_weight 告诉父视图(在本例中为 TableRow)如何定位子视图,因此它将使 CheckBox 在表格单元格内居中对齐。


这并没有帮助。我猜是因为复选框被拉伸以填满整个父级容器,所以当我尝试将其居中时,它无处可去。 - ab11
对不起,我弄错了。这确实解决了问题。谢谢你。 - ab11
4
我们可以通过编程的方式来设置它,代码如下:TableRow.LayoutParams params = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT); params.gravity = Gravity.CENTER_HORIZONTAL; - Adil Malik
@AdilMalik 我想将重力设置在中心,而不仅仅是水平中心,请帮帮我。 - Hiren Patel

1
使用。
android:layout_gravity="center"

它将集中复选框,无论其宽度是硬编码还是"wrap_content"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接