为什么我的TableRow中的视图不会对其权重做出反应?

时间:2012-08-19 20:09:04

标签: java android android-tablelayout

我正在编写一个Android应用程序,我正在尝试显示一个表格。我的问题是,列没有填满屏幕,他们只是坚持到左边。

我已经尝试过使用填充,但首先我不认为它与所有显示分辨率兼容,其次当列中的内容不同时,列的对齐方式不同。

然后我读到了重量,这正是我想要的,给每一列一个特定百分比的屏幕宽度。但是重量导致细胞再次向左侧移动。他们确实没有对我设定的重量做出反应。

我在xml模板中编写视图,并使用LayoutInflater以编程方式对它们进行充气。然后我将它们添加到相应的TableRow中。所有这一切都很好,但他们只是没有对重量作出反应。

我真的很感谢你的帮助。

编辑:模板指的是样式,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/scheduleClass" />

风格如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="scheduleItem" parent="@android:style/TextAppearance.Medium">
        <item name="android:layout_width">0dp</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:paddingRight">0dp</item>
        <item name="android:paddingBottom">10dp</item>
    </style>
    <style name="scheduleClass" parent="scheduleItem">
        <item name="android:layout_weight">0.2</item>
    </style>
</resources>

还有其他几个列,但它们只有另一个名称和另一个权重。

这就是我将视图添加到表中的方式:

public void updateList(ArrayList<Lesson> lessons) {
    setContentView(R.layout.schedule);
    TableLayout table = (TableLayout) findViewById(R.id.table);

    for(Lesson cancel : lessons) {
        TableRow row = new TableRow(this);

        TextView date = (TextView) this.getLayoutInflater().inflate(R.layout.scheduledatetemplate, null);
        date.setText(cancel.date);

        TextView classname = (TextView) this.getLayoutInflater().inflate(R.layout.scheduleclasstemplate, null);
        classname.setText(cancel.classname);

        TextView lesson = (TextView) this.getLayoutInflater().inflate(R.layout.schedulelessontemplate, null);
        lesson.setText(cancel.lesson);

        Button details = (Button) this.getLayoutInflater().inflate(R.layout.detailsbuttontemplate, null);
        details.setText(R.string.details);
        details.setOnClickListener(this);

        row.addView(date);
        row.addView(classname);
        row.addView(lesson);
        row.addView(details);

        table.addView(row);
    }
}

这是TableLayout xml:

<?xml version="1.0" encoding="utf-8"?>

<ScrollView  xmlns:android="http://schemas.android.com/apk/res/android"
    android:scrollbars="vertical"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent">

    <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/table"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:scrollbars="vertical">

    </TableLayout>
</ScrollView>

1 个答案:

答案 0 :(得分:0)

您需要向android:layout_column

声明android:layout_spanTableRow属性

请参阅http://developer.android.com/reference/android/widget/TableRow.LayoutParams.html

在此处查看示例: http://www.mkyong.com/android/android-tablelayout-example/

更新: 好的,你需要在你正在创建的每一行中设置layout_span和layout_column,使用这个addView方法: http://developer.android.com/reference/android/widget/TableLayout.html#addView(android.view.View,int,android.view.ViewGroup.LayoutParams)

使用适当的列和跨度提供布局参数,使您的行跨越整个表格,并使行gravity = center以使其内容位于中心。

此外,表格属性strechColumns http://developer.android.com/reference/android/widget/TableLayout.html#attr_android:stretchColumns 可以帮助你,如:

android:strechColumns="*"

或类似的东西。