我创建了自定义列表视图,每行看起来像我的文件custom_row.xml。有没有办法,如何分别为每一行设置不同的背景颜色(我需要设置它,因为我的行可以有不同的值)。
感谢您的任何想法
答案 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;
}