1

我创建了一个收件箱活动,并且正在镜像 Android 附带的默认邮件应用程序的一些功能。

在“邮件”中,未读邮件的背景颜色比列表中的其他项目要浅。我通过在我的适配器的 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 设备具有某种滚动功能,您可以使用它),列表项会变成黄色,就像它们有焦点一样。

如何在不失去突出显示列表项的能力的情况下完成我想做的事情?

谢谢你的帮助

4

2 回答 2

7

这是因为高亮显示在列表项的后面。您需要为项目的背景创建一个可绘制的状态列表,在选定状态下将背景颜色设置为透明。如果您查找我在 Google I/O 2010 上发表的关于 ListView 的讨论,您将获得如何执行此操作的示例。

于 2010-08-03T18:59:32.217 回答
2

根据 Romain Guy 的建议,我在 YouTube 上观看了“Google I/O 2010 - ListView 的世界”视频。大约在 31 点 43 分左右,他发布了一段代码来解决这个问题。不过,您必须进行一些修改(我正在针对 2.1 进行开发)。首先,您必须在选择器标记中声明 xmlns:android 参数。在您的 Java 代码中,您必须调用 convertView.setBackgroundResource(R.drawable.yourselector),而不是 setBackground(它似乎不再存在)。

于 2010-08-03T21:38:14.603 回答