如何覆盖Android Listview的行

时间:2012-04-10 15:05:13

标签: android listview android-listview

我正在尝试实现以下Android ListView。每个黄色框表示一行ListView。如果您看到行,则每行都会被上一行和下一行重叠。我搜索过谷歌,但我找不到任何合适的解决方案。如果有人有线索,请告诉我。

提前致谢。

enter image description here

2 个答案:

答案 0 :(得分:3)

在盒子外面思考。想象一下这个列表没有行重叠,只是在它上面有对角线。在您的代码中,将Listview的分隔符高度设置为0:

ListView listView = (ListView)findViewById(R.id.your_listview);
listView.setDivider(null);
listView.setDividerHeight(0);

然后为行创建两个drawable - 一个用于奇数行,另一个用于偶数行:

enter image description hereenter image description here

(不要使用这两张图片,因为它们的尺寸不合适/均匀,但会为您的特定列表创建一些图片。)

然后为列表视图创建一个适配器 - 并在其getView方法中,为元素设置相应的背景:

@override
public void getView(int position, View convertView, ViewGroup parent) {
    MyView row;

    if(convertView == null) {
        row = (MyView)convertView;
    }
    else {
        row = ... //create your view - inflate or create in code
    }

    row.setBackgroundResource(position%2==1 ? R.drawable.row_odd : R.drawable.row_even);

    ...  //populate the rest of the row with whatever you need

    return row;
}

瞧!你得到了你需要的效果(注意,在这个原理图中,黑线表示行之间的界限 - 这些仅用于示意图 - 在最终结果中你不会有它们):

enter image description here

最后,请注意,如果要在选择项目时突出显示“行”,则必须实现自定义状态更改侦听器,这将更改正在选择的单元格的背景以及上面的那些在它下面,以创造适当的视觉效果。

答案 1 :(得分:0)

我遇到了同样的问题,但我设法找到了解决方案

在xml的ListView中你可以设置一个负的dividerHeight,它适用于我。

<ListView
...
android:dividerHeight="-5dp" />

我希望它可以帮助某人:)