我正在尝试使用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行是显而易见的,但显然是因为它们内部具有相同的数据)。
答案 0 :(得分:0)
尝试替换
convertView = mInflater.inflate(R.layout.list,parent,false);
与
convertView = mInflater.inflate(R.layout.list,null);
并且对于表格单元格对齐问题,您可以给出一个示例快照bcos我没有得到您想要完成的任务。
答案 1 :(得分:0)
我也遇到了表头和表行有数据对齐的问题,但经过多次努力后我发现摆脱这个问题的唯一方法是给所有列赋予修复大小