4

是否可以在自定义适配器中设置 ListView/ExpandableListView 的backgroundResourcebackgroundColor

我有一个透明的 png,它将作为可扩展列表视图中每一行的边框。这个图像只是一个内部阴影和底部的边框。

目标是做这样的事情:

png + 颜色

当我设置 backgroundResource 和 backgroundColor 时,两者中只有一个出现。我无法获得覆盖颜色的资源。有谁知道这是否可能?

这是我的代码以获得更好的主意:

private int[] colors2= new int[] { Color.parseColor("#e2e8e9"), Color.parseColor("#f1f2f2") };
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
    ViewHolder holder;
    ExpandListGroup group = (ExpandListGroup) getGroup(groupPosition);
    if (convertView == null) {
        holder = new ViewHolder();
        LayoutInflater inf = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
        convertView = inf.inflate(R.layout.expandlist_group_item, null);
        holder.title = (TextView) convertView.findViewById(R.id.tvGroup);
        convertView.setTag(holder);
    }else{
        holder = (ViewHolder) convertView.getTag();
    }
    int colorPos = groupPosition % colors.length; 
    convertView.setBackgroundResource(R.drawable.row_forground);
    convertView.setBackgroundColor(color2[colorPos]);
    holder.title.setText(group.getName());
    return convertView;
}
4

4 回答 4

9

setBackgroundResource and setBackgroundColor both use the same api setBackgroundDrawable internally to do their tasks. So one overwrites the other. So you wont be able to achieve your goal using this api.

You will have to use setBackgroundResource with a custom drawable

于 2012-08-15T21:28:44.633 回答
5

如果你想使用setBackgroundResourcesetBackgroundColor你可以这样做:

...
int colorPos = groupPosition % colors.length;
convertView.setBackgroundResource(R.drawable.row_forground);
GradientDrawable drawable = (GradientDrawable) convertView.getBackground();
drawable.setColor(color2[colorPos]);
...
于 2014-11-28T00:14:41.727 回答
1

肯定有代码可以绘制背景并在其上使用一些颜色。但我现在不记得了:-)
但是还有其他方法可以实现你的目标。看看这个网站: http:
//developer.android.com/guide/topics/resources/drawable-resource.html
看看你可以准备的9patch drawables,它们只是小图像,可以根据需要缩小/扩展。你准备一个里面有其他颜色的。
第二种方法是使用 ShapeDrawable。在 XML 中,您可以在其中创建矩形和一些纯色。
在这两种情况下,您只需根据需要交换背景可绘制对象。
我不明白你想要实现什么,但我希望这能有所帮助。

于 2012-08-15T21:22:34.177 回答
0

只需在将背景资源设置为这样的视图后添加一个 ColorFilter

view.setBackgroundResource(R.drawable.yourRessource);
view.getBackground().setColorFilter(
                Color.yourColor,
                PorterDuff.Mode.DST_OVER
);

了解有关使用 Android 的 ColorFilter 操作图像和 Drawable 的更多信息

于 2019-12-31T15:00:39.837 回答