2012-04-10 55 views
0

我想实现下面的Android ListView。每个黄色框代表一行ListView。如果您看到这些行,则每行都被上一行和下一行重叠。我搜索了Google,但我找不到任何适当的解决方案。如果有人有线索,请告诉我。如何覆盖Android列表视图

在此先感谢。

enter image description here

回答

3

条条框框。想象一下,这个列表没有行重叠,只是有对角线。在你的代码,设置ListView的分隔器高度为0:

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

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

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

如果你想只是去行对角线(用“除法”都指向同样的方式),那么你就可以做到这一点更简单:只需创建一个您的分隔线的图像,并将其设置为您的列表视图的分隔线可绘制在XML – 2012-04-10 16:30:52

+0

谢谢您的答案..我也认为解决方案,但对于目前的应用程序,我们无法使用它,因为黄色区域是一个图像,有时图像被改变。所以,为了实现这一点,我应该覆盖行。是否有人可以覆盖ListView行或决定是否可行?在此先感谢.. :) – mooongcle 2012-04-11 17:35:26

+0

@mooongcle我不认为这是不可能覆盖行。 android列表绘制的方式是每行都绘制在某个位置,就在前一行的下方。您可以尝试使用行视图的边距(在适配器的getView中)将顶部边距设置为负值,但我怀疑这是可能的。 – 2012-04-11 19:00:37

0

我得到了相同的问题,但我设法找到一个解决办法

在你可以设置一个负dividerHeight的XML ListView控件,它为我工作。

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

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