2009-09-09 118 views
9

我有一个ListView,我从自定义ListAdapter填充。在适配器内部(在getView(int, View, ViewGroup)方法中)我使用setBackgroundColor(int)设置了View的背景颜色。问题是,无论我设置背景的颜色是什么颜色,都会呈现深灰色。也许值得一提的是我使用Light主题。Android ListView的背景颜色总是显示灰色

相关(简化的)的码位:

的AndroidManifest.xml:

<activity 
    android:name=".MyActivity" 
    android:theme="@android:style/Theme.Light" /> 

MyAdapter.java:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = LayoutInflater.from(mContext); 
    View av = inflater.inflate(R.layout.my_row, parent, false); 
    av.setBackgroundColor(R.color.myRow_red); 
    mName = (TextView) av.findViewById(R.id.myRow_name); 
    mName.setText("This is a name"); 
    return av; 
} 

任何想法/建议?

回答

22

你应该使用: setBackgroundResource(R.color.myRow_red) 而不是setBackgroundColor()在您的示例中,背景颜色使用ID分配,而不是在资源中描述的实际颜色。

+0

谢谢你是一个救生员:) – user1940676 2013-10-07 08:27:16

+0

我有类似的情况,但我不能使用此解决方案的形状。我在这里问了一个更详细的问题:http://stackoverflow.com/questions/39820240/android-canvas-drawrect-colour-always-shows-as-grey – Vedant261 2016-10-02 23:56:12

6

您必须将cacheColorHint属性设置为您的列表所需的背景颜色。这是解决Android在列表中执行的绘图优化所需的解决方法。

在这里看到:link text

+0

这是正确的,如果您不需要动态更改背景颜色,则可以在my_row.xml布局文件中添加android:background =“#FF0000”。 – 2009-09-09 09:35:11

+0

midj:对我来说实际上不是这样,你只是看到一个超简化的例子。 – 2009-09-09 20:02:28

+0

@fiXedd:那么你的问题是什么呢?没有停用颜色缓存帮助? – Matthias 2009-09-10 08:45:08

0

你感冒时总是将整行包裹在另一个视图中,并在该视图上设置背景颜色。这个观点将是该行的第一个(也是唯一的)孩子。

0

试试这个:

setBackgroundColor(0xFF5DB9FB); 
0

尝试做这样的:

av.setBackgroundColor(getResources().getColor(R.color.myRow_red));

2

我遇到类似的问题,即分隔就要到了灰色。我发现其他解决方案没有效果,但我的ListView上的android:divider="<drawable,color, or whatever>"工作。