【问题标题】:Android Table Layout AlignmentAndroid表格布局对齐
【发布时间】:2012-12-09 15:50:58
【问题描述】:

我正在使用表格布局来显示数据,如下所示。

我想做什么?

我希望第二列中的文本向左对齐,并且文本应该换行并显示在下一行并溢出,如您在图像中看到的那样。

代码:

    <TableLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/tableLayout1"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <TableRow
            android:id="@+id/tableRow2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingBottom="10dp" >

            <ImageView
                android:id="@+id/place_category_icon"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:contentDescription="ss"
                android:paddingRight="10dp"
                android:src="@drawable/icon_category"
                android:textAlignment="textStart" />

            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_gravity="center"
                android:text="230 kms"
                android:textSize="16sp" >
            </TextView>
        </TableRow>

        <TableRow
            android:id="@+id/tableRow2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingBottom="10dp" >

            <ImageView
                android:id="@+id/place_category_icon"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:contentDescription="ss"
                android:paddingRight="10dp"
                android:src="@drawable/icon_category"
                android:textAlignment="textStart" />

            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_gravity="center"
                android:text="Hill Station, Wild Life"
                android:textSize="16sp" >
            </TextView>
        </TableRow>

        <TableRow
            android:id="@+id/tableRow2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingBottom="10dp" >

            <ImageView
                android:id="@+id/place_category_icon"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:contentDescription="ss"
                android:paddingRight="10dp"
                android:src="@drawable/icon_category"
                android:textAlignment="textStart" />

            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_gravity="center"
                android:text="Summer 23-40°C, Winter 10-32°C"
                android:textSize="16sp" >
            </TextView>
        </TableRow>

        <TableRow
            android:id="@+id/tableRow2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingBottom="10dp" >

            <ImageView
                android:id="@+id/place_category_icon"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:contentDescription="ss"
                android:paddingRight="10dp"
                android:src="@drawable/icon_category"
                android:textAlignment="textStart" />

            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_gravity="center"
                android:text="Tippus Drop, Tippus Summer Residence, Brahmashram, Cycling, Paragliding"
                android:textSize="16sp" >
            </TextView>
        </TableRow>
    </TableLayout>

它应该是什么样子

【问题讨论】:

  • 尝试 textview 填充?
  • @Dinesh 是的,我试过了。真的没有帮助
  • 你的意思是你要在左边230公里
  • 能否请您详细解释一下要求的意思。
  • @Nick 是的,我希望第二列在图标旁边左对齐。以及要换行到下一行的文本

标签: android alignment android-tablelayout


【解决方案1】:

我的猜测 - 改变 layout_width 并摆脱重力:

 <TextView
            android:id="@+id/textView2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            ...
            >
        </TextView>

【讨论】:

    【解决方案2】:

    我能想到的最简单的方法是用LinearLayout 包装每个TableRow 内容,如下所示:

    <TableLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/tableLayout1"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
    
            <TableRow
                android:id="@+id/tableRow2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingBottom="10dp" >
    
                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent" >
    
                    <ImageView
                        android:id="@+id/place_category_icon"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerVertical="true"
                        android:contentDescription="ss"
                        android:paddingRight="10dp"
                        android:src="@drawable/ic_launcher" />
    
                    <TextView
                        android:id="@+id/textView2"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerVertical="true"
                        android:layout_gravity="center"
                        android:text="230 kms"
                        android:textSize="16sp" >
                    </TextView>
                </LinearLayout>
            </TableRow>
    
            <TableRow
                android:id="@+id/tableRow2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingBottom="10dp" >
    
                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent" >
    
                    <ImageView
                        android:id="@+id/place_category_icon"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerVertical="true"
                        android:contentDescription="ss"
                        android:paddingRight="10dp"
                        android:src="@drawable/ic_launcher" />
    
                    <TextView
                        android:id="@+id/textView2"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerVertical="true"
                        android:layout_gravity="center"
                        android:text="Hill Station, Wild Life"
                        android:textSize="16sp" >
                    </TextView>
                </LinearLayout>
            </TableRow>
    
            <TableRow
                android:id="@+id/tableRow2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingBottom="10dp" >
    
                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent" >
    
                    <ImageView
                        android:id="@+id/place_category_icon"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerVertical="true"
                        android:contentDescription="ss"
                        android:paddingRight="10dp"
                        android:src="@drawable/ic_launcher" />
    
                    <TextView
                        android:id="@+id/textView2"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerVertical="true"
                        android:layout_gravity="center"
                        android:text="Summer 23-40°C, Winter 10-32°C"
                        android:textSize="16sp" >
                    </TextView>
                </LinearLayout>
            </TableRow>
    
            <TableRow
                android:id="@+id/tableRow2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingBottom="10dp" >
    
                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent" >
    
                    <ImageView
                        android:id="@+id/place_category_icon"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerVertical="true"
                        android:contentDescription="ss"
                        android:paddingRight="10dp"
                        android:src="@drawable/ic_launcher" />
    
                    <TextView
                        android:id="@+id/textView2"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerVertical="true"
                        android:layout_gravity="center"
                        android:text="Tippus Drop, Tippus Summer Residence, Brahmashram, Cycling, Paragliding"
                        android:textSize="16sp" >
                    </TextView>
                </LinearLayout>
            </TableRow>
        </TableLayout>
    

    结果如下:

    希望我正确理解了您的要求。

    【讨论】:

    • 谢谢。无论如何都要制作最后一组行。从中心开始,然后向下流动?已更新我的答案以显示我想要实现的目标
    • 如果你将 paddingTop 添加到 TextView 你可以实现这一点。我不确定是否有更有效的方法来做到这一点。
    【解决方案3】:

    由于TableRow 几乎是水平方向的LinearLayout,因此只需使用权重原理使TextView 填满ImageView 之后的所有空间。这意味着您必须将行更改为如下所示:

        <!-- no need to set width/height as those are implicitly enforced -->
        <TableRow
            android:id="@+id/tableRow2"
            android:paddingBottom="10dp" >
    
            <ImageView
                android:id="@+id/place_category_icon"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:contentDescription="ss"
                android:paddingRight="10dp"
                android:src="@drawable/icon_category" />
    
            <!-- width of '0' and weight of '1' will make this view fill up all remaining space -->
            <TextView
                android:id="@+id/textView2"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:layout_gravity="center_vertical"
                android:text="230 kms"
                android:textSize="16sp" />
    
        </TableRow>
    

    我还删除/更改了一些多余的属性。请注意,我只是直接在浏览器中输入的 - 可能需要奇怪的错字或调整。

    【讨论】:

    • 你提供了 android:layout_width="0dp" 为什么它是零?
    • 这是处理权重和LinearLayouts 时的常见做法,因为它加快了测量/布局过程。在这种情况下,您不关心初始宽度,而是关心剩余空间如何在子视图之间分布。对于这种特定情况,它可以正常工作,例如wrap_content 也是;它只是效率稍低。