Android - 自定义listView,每行不同颜色

时间:2012-04-18 16:28:36

标签: android android-listview custom-lists

我创建了自定义列表视图,每行看起来像我的文件custom_row.xml。有没有办法,如何分别为每一行设置不同的背景颜色(我需要设置它,因为我的行可以有不同的值)。

感谢您的任何想法

3 个答案:

答案 0 :(得分:2)

因为你在getView方法中做自定义列表视图 在膨胀custom_row.xml之后更改后台 返回膨胀方法的视图。请参阅下面的示例代码段:

public getView(int position, View convertView, ViewGroup parent) {
       convertView = getLayoutInflater().inflate(R.layout.custom_xml, null);
       do some stuff...

       //let say you have an arraylist of color
       convertView.setBackgroundColor(arraylist.get(position));

       //in case that your color is limited, just re-use your color again
       //and some logic how to re-use the colors.
}

答案 1 :(得分:1)

在适配器中,您可以使用getView方法在检索视图时手动设置视图的背景颜色。

    // set the background to green
    v.setBackgroundColor(Color.GREEN);

答案 2 :(得分:1)

使用此处的其他答案阻止选择器正常工作,选择器停止完全突出显示行。通过按照接受的答案中的说明手动设置颜色,选择器在滚动时停止突出显示行。因此,让我描述一个不会弄乱您的选择器的解决方案。

This article正在描述如何通过透明度解决这个问题,但我无法真正做到这一点。所以对我来说解决方案是我的drawable文件夹中有两个列表选择器。这样我就可以在运行时设置两种不同的背景颜色并保持选择器工作。

我的深灰色线

list_selector_darkgrey.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/gradient_bg_darkgrey" android:state_pressed="false" android:state_selected="false"/>
<item android:drawable="@drawable/gradient_bg_hover" android:state_pressed="true"/>
<item android:drawable="@drawable/gradient_bg_hover" android:state_pressed="false" android:state_selected="true"/>
</selector>

和list_selector.xml为浅灰色线

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/gradient_bg" android:state_pressed="false" android:state_selected="false"/>
<item android:drawable="@drawable/gradient_bg_hover" android:state_pressed="true"/>
<item android:drawable="@drawable/gradient_bg_hover" android:state_pressed="false" android:state_selected="true"/>
</selector>

请忽略drawable中的渐变,您可以用颜色替换它。

在BaseAdapter类中,我将调用setBackgroundResource将一些行显示为浅灰色,将其他行显示为深灰色。选择器颜色相同并在XML文件中定义。

public View getView(int position, View convertView, ViewGroup parent) {
    View vi = convertView;

    if (convertView == null)
        vi = inflater.inflate(R.layout.list_row, null);

             ... some logic ...

    if (... some condition ...) {
        vi.setBackgroundResource(R.drawable.list_selector_darkgrey);
    }
    else { 
        vi.setBackgroundResource(R.drawable.list_selector);
    }
    return vi;
}