我创建了一个收件箱活动,我正在镜像Android附带的默认Mail应用程序的一些功能。
在Mail中,未读取的邮件的背景颜色比列表中其他项目的颜色浅。我通过在我的Adapter的getView方法中设置调用setBackgroundResource来镜像这个。 setBackgroundColor不做任何事情。
if (!msgSum.getIsRead()) {
LinearLayout l = (LinearLayout) v.findViewById(R.id.inbox_background);
if (l != null) {
l.setBackgroundResource(R.color.inbox_unread);
}
}
else {
LinearLayout l = (LinearLayout) v.findViewById(R.id.inbox_background);
if (l != null) {
l.setBackgroundResource(R.color.inbox_read);
}
}
问题是,项目失去了突出显示的能力。我的意思是,通常如果您在使用模拟器时滚动鼠标滚轮(或者如果您的Android设备具有某种滚动功能,则使用它),列表项将变为黄色,就像它们具有焦点一样。
如何在不失去突出显示列表项的能力的情况下完成我想要做的事情?
感谢您的帮助
答案 0 :(得分:7)
这是因为突出显示在列表项后面。您需要为项目的背景创建一个可绘制的状态列表,在所选状态下将背景颜色设置为透明。如果您查看我在Google I / O 2010上提供的关于ListView的讨论,您将获得如何执行此操作的示例。
答案 1 :(得分:2)
Per Romain Guy的建议,我在YouTube上观看了“Google I / O 2010 - ListView世界”视频。大约31:43分钟,他发布了一段代码解决了这个问题。你必须做一些修改(我正在开发2.1)。首先,您必须在选择器标记中声明xmlns:android参数。在Java代码中,必须调用convertView.setBackgroundResource(R.drawable.yourselector),而不是setBackground(它似乎不再存在)。