Android的 - 自定义的ListView,各行不同的颜色(Android - custom l

2019-10-16 14:34发布

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

感谢您的任何想法

Answer 1:

因为你做的自定义列表视图中的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.
}


Answer 2:

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

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


Answer 3:

这里使用其他答案防止选择正常工作和选择完全停止突出的行。 通过如在接受答案描述手动设置的颜色,选择停止突出行滚动时。 所以,我给大家介绍一个解决方案,不惹你的选择。

本文描述的是如何与透明度解决这个问题,但我不能真正使工作。 所以对我来说,解决办法是,我在我的文件夹绘制两个列表选择。 这样我可以在运行时设置两个不同的背景颜色,并保持工作的选择。

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>

请忽略绘制梯度,你可以用你的颜色替换它。

在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;
}


文章来源: Android - custom listView, each row different colours