我有一个自定义可绘制资源来在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代码中缺少什么?
答案 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用于您自己的)。