如何在 tablelayout 中对齐视图

how to align views inside tablelayout

在下面的 xml 布局中,我想制作一个 table 布局来承载一些文本视图。下面张贴的 xml 布局的结果是每个旁边有四个 textview 其他无间距。我知道我可以使用边距使每个视图与另一个视图之间的距离有点远,但我想使用重力方向在视图之间留出间距 布局重力。

我想要的结果是

odometer:value space space space space space tfu:val

我希望 tfu 始终显示在同一位置,而不管里程表数值的数字位数。换句话说,考虑以下 我不想有的例子

odometer:1234567                            tfu:1234567
odometer:1234567890                            tfu:1234567

我想要的是,无论里程表有多少位数,tfu textview 必须始终显示在 sam 位置,如下例所示:

odometer:1234567                            tfu:1234567
odometer:1234567890121223434                tfu:1234567

please tell me how achieve that.

代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:fitsSystemWindows="true"
tools:context=".MainActivity">

<TableLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:shrinkColumns="*"
android:collapseColumns="*"
android:orientation="vertical">

<TableRow
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/tv_label_odometer"
        android:text="odometer: "/>
    <TextView
        android:id="@+id/tv_odometer"
        android:text="val"/>
    <TextView
        android:id="@+id/tv_label_tfu"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="tfu: "/>
    <TextView
        android:id="@+id/tv_tfu"/>
</TableRow>
</TableLayout>


</RelativeLayout>

试试这个

<RelativeLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                    >

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_alignParentLeft="true"/>

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_alignParentRight="true"/>

                    </RelativeLayout>

这是我正在使用的。一个在右边,一个在左边。如果你想要更多,就重复它,并使用边距调整 space.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:fitsSystemWindows="true"
tools:context=".MainActivity">

<TableLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:shrinkColumns="*"
    android:collapseColumns="*"
    android:orientation="vertical">

    <TableRow
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:orientation="horizontal">

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1">
        <TextView
            android:id="@+id/tv_label_odometer"
            android:text="odometer: "/>
        <TextView
            android:id="@+id/tv_odometer"
            android:text="val"/>
    </LinearLayout>
        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1">
        <TextView
            android:id="@+id/tv_label_tfu"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="tfu: "/>
        <TextView
            android:id="@+id/tv_tfu"/>
        </LinearLayout>
    </TableRow>
</TableLayout>
</RelativeLayout>

添加一个LinearLayout来包裹两个TextView,并将其宽度设置为0dp,layout_weight设置为1.then两个linearlayout将有其父级宽度的一半,我认为这可以解决你的问题。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context=".MainActivity" >

    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

        <TableRow
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:orientation="horizontal" >

            <TextView
                android:id="@+id/tv_label_odometer"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="odometer: " />

            <TextView
                android:id="@+id/tv_odometer"
                android:layout_width="0sp"
                android:layout_height="wrap_content"
                android:layout_weight="2"
                android:text="1234567" />

            <TextView
                android:id="@+id/tv_label_tfu"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="tfu: " />

            <TextView
                android:id="@+id/tv_tfu"
                android:layout_width="0sp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="1234567" />
        </TableRow>
    </TableLayout>

</RelativeLayout>