我正在尝试使用 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 行是对齐的,但这显然是因为它们内部具有相同的数据)。