TableLayout不会匹配_parent LinearLayout宽度

时间:2013-11-15 00:21:32

标签: android android-tablelayout

我需要得到一个TableLayout来匹配它的父LinearLayout的宽度,但我无法让它工作。

在下面的第一个屏幕截图中,“Short header”是垂直LinearLayout中的第一个视图。下面的“字段”是TableLayout的成员,TableLayout是垂直LinearLayout中的第二个视图。

当“标题”文本不需要像TableLayout那样宽时,所有内容都按预期排列。

当“标题”需要的宽度超过TableLayout时,TableLayout与“标题”不匹配,如第二个屏幕截图所示。

如何使TableLayout与LinearLayout的宽度相匹配?

注意: 基础LinearLayout需要“换行”到显示其内容所需的最小宽度,因此设置固定宽度不是解决方案< / em>的

Short Header

Long Header

此测试的布局XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/mainLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <LinearLayout 
       android:id="@+id/baseLinerLayout"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:orientation="vertical"
       android:background="#FFAAAAAA" >

       <TextView
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:gravity="center"
           android:padding="10dp"
           android:background="#FF000000"
           android:textColor="#FFFFFFFF"
           android:text="Long header to make base layout wider than table layout" />

          <TableLayout 
            android:id="@+id/tableLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#33FFFFFF" >

            <TableRow
                android:id="@+id/tableRow1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <TextView
                    android:gravity="center"
                    android:padding="10dp"
                    android:background="#44FFFFFF"
                    android:textColor="#FF000000"
                    android:text="Field (0,0)" />

                <TextView
                    android:gravity="center"
                    android:padding="10dp"
                    android:background="#88FFFFFF"
                    android:textColor="#FF000000"
                    android:text="Field (0,1)" />

            </TableRow>

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

                <TextView
                    android:gravity="center"
                    android:padding="10dp"
                    android:background="#88FFFFFF"
                    android:textColor="#FF000000"
                    android:text="Field (0,1)" />

            </TableRow>
        </TableLayout>
   </LinearLayout>
</RelativeLayout>

3 个答案:

答案 0 :(得分:4)

<TableRow
     android:id="@+id/tableRow1"
     android:layout_width="match_parent"
     android:layout_height="wrap_content" >

     <TextView
           android:layout_weight="1 --- this worked for me"  
           android:gravity="center"
           android:padding="10dp"
           android:background="#44FFFFFF"
           android:textColor="#FF000000"
           android:text="Field (0,0)" />
    <TextView
           android:layout_weight="1"
           android:gravity="center"
           android:padding="10dp"
           android:background="#88FFFFFF"
           android:textColor="#FF000000"
           android:text="Field (0,1)" />

</TableRow>

答案 1 :(得分:1)

当您使用未设置宽度的TextView时,我建议您将所有字段的android:layout_width参数设置为match_parent

编辑: 为什么需要第二个LinearLayout?它似乎没用,因为它只包装了TableLayout。

答案 2 :(得分:1)

你需要在java文件中以编程方式获得base linearlayout的宽度...

How to get width ? Check here

之后你可以用相同的宽度设置表格布局的宽度

  TableLayout layout = (TableLayout)findViewById(R.id.tableLayout);
    // Gets the layout params that will allow you to resize the layout

LayoutParams params = layout.getLayoutParams();

// Changes the height and width to the specified *pixels*

params.width = x;

layout.setlayoutparams(params);

x是从线性布局

获得的宽度