我需要得到一个TableLayout来匹配它的父LinearLayout的宽度,但我无法让它工作。
在下面的第一个屏幕截图中,“Short header”是垂直LinearLayout中的第一个视图。下面的“字段”是TableLayout的成员,TableLayout是垂直LinearLayout中的第二个视图。
当“标题”文本不需要像TableLayout那样宽时,所有内容都按预期排列。
当“标题”需要的宽度超过TableLayout时,TableLayout与“标题”不匹配,如第二个屏幕截图所示。
如何使TableLayout与LinearLayout的宽度相匹配?
注意: 基础LinearLayout需要“换行”到显示其内容所需的最小宽度,因此设置固定宽度不是解决方案< / em>的
此测试的布局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>
答案 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的宽度...
之后你可以用相同的宽度设置表格布局的宽度
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是从线性布局
获得的宽度