setBackgroundColor(drawable)!= android:background =(drawable)?

时间:2011-01-17 23:10:12

标签: android listview drawable listactivity

我有一个自定义可绘制资源来在ListView中显示我的项目,实际上有两个因为我希望我的结果具有交替的背景颜色,但两者都通过更改颜色来响应点击。问题是甚至在通过布局XML将这些drawable中的一个分配给我的LinearLayout容器时,它工作正常,但是通过Java代码它没有。确切地说,这是有效的:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/result_white"
android:id="@+id/result"
>

但是(在我的ResultAdapter中扩展了ArrayAdapter)不会:

LinearLayout result = (LinearLayout) v.findViewById(R.id.result);
result.setBackgroundColor(R.drawable.result_white);

我的最终目标当然是为结果交替使用'result_white'和'result_ltgray'drawables,因此第一个XML解决方案并不能真正满足我的需求。我在Java代码中缺少什么?

3 个答案:

答案 0 :(得分:5)

好吧,假设你只使用单色背景,你应该使用Colors,因为drawable可以是形状,渐变等等。现在,要实际使用颜色,您的代码将类似于:

result.setBackgroundColor(mContext.getResources.getColor(R.color.result_white));

其中mContext是上下文,并且res ​​/ values / colors.xml文件中有一种颜色(例如0xFFFFFFFF)。

在按下/选择/ etc

时,还要查看Color State Lists更改颜色

答案 1 :(得分:4)

感谢您的帮助,但我需要做的是:

result.setBackgroundResource(R.drawable.result_white);

通过这种方式,我可以轻松地将其实现到我的ResultAdapter中,以便对具有不断变化背景的点击作出反应:

LinearLayout result = (LinearLayout) v.findViewById(R.id.result);

        if (position % 2 == 0)
            result.setBackgroundResource(R.drawable.result_white);
        else
            result.setBackgroundResource(R.drawable.result_ltgray);

答案 2 :(得分:2)

确保为R导入了正确的引用(android.R用于android drawables,your_app_path.R用于您自己的)。