1

我正在尝试使用 ListView 中的 TableLayout 以网格样式显示一组数据。我想要的是用不同的颜色(两种颜色交替)显示每一行。在 ListView 中使用普通 LinearLayout 时效果很好,但无论出于何种原因,在使用 TableLayout 时,我最终都会让所有行都具有相同的背景,我认为这是最后一组。

为此,我使用了 BaseAdapter,在 getView 函数中我有类似的东西:

public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;

            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.list, parent, false);
                holder = new ViewHolder();
                holder.from = (TextView) convertView.findViewById(R.id.from);
                holder.to = (TextView) convertView.findViewById(R.id.to);

                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            if(position%2==0) {
                convertView.setBackgroundColor(R.color.cell_background);
            }
            //alternate background
            else {
                convertView.setBackgroundColor(R.color.cell_background_alternate);
            }

            // Bind the data efficiently with the holder.
            holder.from.setText(list.get(position)[0]);
            holder.to.setText(list.get(position)[1]);

            return convertView;
        }

现在在我的 main.xml 中,我只有一个 ListView。在用于扩充列表的 list.xml 中,我有:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TableRow
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <TextView android:id="@+id/from"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:layout_weight="1"/>

        <TextView android:id="@+id/to"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:layout_weight="1"/>
    </TableRow>
</TableLayout>

此外,另一个问题是列没有对齐:当 TableLayout 应该对齐所有列时,它只需要为每一行、每一列占用尽可能多的空间。我想出的唯一解决方法是为列设置最小宽度,但这并不漂亮。为什么它在这里不起作用?

编辑 21/06: 单元格未对齐

正如您在图片中看到的那样,列未对齐(第 2 行和第 3 行是对齐的,但这显然是因为它们内部具有相同的数据)。

4

2 回答 2

0

尝试更换

convertView = mInflater.inflate(R.layout.list, parent, false);

convertView = mInflater.inflate(R.layout.list, null);

对于表格单元格对齐问题,您能否举一个示例快照 bcos 我没有得到您想要完成的任务。

于 2011-06-21T01:58:30.333 回答
0

我也遇到了表格标题和表格行的对齐问题,但经过大量努力,我发现摆脱这个问题的唯一方法是为所有列提供固定大小

于 2012-05-30T06:17:15.270 回答