33
public class ListView extends  ListActivity {

static String item;

public void onCreate(Bundle icicle) {
            super.onCreate(icicle);

            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, Str.S);
            setListAdapter(adapter);

      }

这是我的列表视图类,它工作得很好,它从一个名为 Str 的类中获取字符串并将它们显示在列表视图中,问题是列表视图样式不好,它是黑色的,字符串是白色的。

我希望它们可以替代每一行都有一种颜色。

我尝试了很多教程,但没有一个足够清楚..我如何为每一行制作替代颜色..例如。第 1 行蓝色,第 2 行白色,第 3 行蓝色,第 4 行白色等。

4

4 回答 4

97

是如何做到这一点的。

我的示例代码在这里简要给出:

覆盖getView适配器中的方法:

@Override
public View getView(int position, View convertView, ViewGroup parent) {  
View view = super.getView(position, convertView, parent);  
if (position % 2 == 1) {
    view.setBackgroundColor(Color.BLUE);  
} else {
    view.setBackgroundColor(Color.CYAN);  
}

return view;  
}

在那里覆盖ArrayAdapter并覆盖 getView 方法。

因此,如果您的适配器是这样的:

public class MyAdapter extends ArrayAdapter

你的ListActivity意志改变如下:

 ArrayAdapter<String> adapter = new MyAdapter<String>(this,
                android.R.layout.simple_list_item_1, Str.S);

这是一个关于覆盖 ArrayAdapter 的示例。

于 2012-10-28T14:51:22.917 回答
4
if (position % 2 == 0) {

    rowView.setBackgroundColor(Color.parseColor("#A4A4A4"));

} else {

    rowView.setBackgroundColor(Color.parseColor("#FFBF00"));

}
于 2016-05-19T10:43:51.933 回答
1

自定义列表视图行的背景颜色可以设置为

row.setBackgroundResource(R.color.list_bg_2)

自定义列表视图适配器中的方法

getView(int position, View convertView, ViewGroup parent)

我尝试了很多事情,row.setBackgroundColor(0xFF00DD)但无法完成,

这里 list_bg_2 是一个颜色集 res/values/color.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="list_bg_1">#ffffff</color>
    <color name="list_bg_2">#fef2e8</color>
</resources>
于 2014-12-17T05:11:33.437 回答
0

如果视图是 ViewGroup,简单的背景设置不起作用

@Override
public View getView(int position, View convertView, ViewGroup parent) {  
    final int rr = (position % 2 == 0) ? R.color.border_end_1 : R.color.black;
    final int cc = getResources().getColor(rr);
    View view = super.getView(position, convertView, parent);  
    walk(view, rr, cc);
    return view;  
}
private void walk(View view, int rr, int cc){
    view.setBackgroundResource(rr);
    ViewGroup group = (ViewGroup)view;
    int nc = group.getChildCount();
    for (int i = 0; i < nc; i++) {
        final View v = group.getChildAt(i);
        if (v instanceof ViewGroup)
            walk(v, rr, cc);
        else
            v.setBackgroundColor(cc);
    }
}
于 2021-03-11T18:39:24.417 回答