更改 Android 日历事件的颜色

Changing the color of an Android Calendar Event

在我的应用程序中,我为特定日期创建了日历事件。因为我希望它们采用我的应用程序的颜色(我希望它们能够快速识别),所以我的问题是,如何实现这一点。这是我拥有的:

Intent intent = new Intent(Intent.ACTION_INSERT);
                intent.setType("vnd.android.cursor.item/event");
                intent.putExtra(CalendarContract.Events.TITLE, "Some Title");
                intent.putExtra(CalendarContract.Events.DESCRIPTION, "Description");

                String dateTime = date.getTime().replace(" Uhr", "");
                dateTime += date.getDate().substring(date.getDate().lastIndexOf(" "));
                SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm dd.MM.yyyy", Locale.GERMAN);
                java.util.Date d = null;
                try {
                    d = dateFormat.parse(dateTime);
                } catch (ParseException e) {
                    e.printStackTrace();
                }

                assert d != null;
                intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, d.getTime());

这里我要设置颜色

                intent.putExtra(CalendarContract.Events.DISPLAY_COLOR, Color.YELLOW);

                myViewHolder.dateView.getContext().startActivity(intent);

Here is a picture of the thing i want to change in the calendar App

EVENT_COLOR 被记录为由日历所属帐户的同步适配器写入。只有应用程序 'owning' 日历应该写入这些值:

This should only be updated by the sync adapter for a given account.

您的应用程序可能会在直接访问日历时强制使用特定值(也就是说,不是通过意图,而是通过直接查询 ContentResolver,如果您有适当的权限)。但是,它们可能会被 'owning' 应用程序覆盖,恕不另行通知,不一定会在设备之间同步,并且可能会导致其他问题。我不建议这样做。

EVENT_COLOR_KEY 的文档不是很清楚,因此如果存在适合您的应用程序的现有事件颜色,则该列可能是一个选项(请注意,现有事件颜色可能取决于日历和用户,不要硬编码颜色键!)。我假设直接使用 ContentResolver 是必要的,使用 Intent 只有在用户选择的日历应用程序支持该功能时才有效(我不知道是否/有多少日历应用程序支持那个)。


如果您需要独立于现有日历颜色和安装的日历应用程序工作的自定义颜色,您可以创建自己的日历并绑定到您的应用程序。为整个日历分配颜色非常简单 (CALENDAR_COLOR)。由于您的应用程序是该日历的所有者,因此您可以自由更改每个事件的任何方面。

但是,这些事件不是您用户现有日历的一部分:它们不会跨设备同步,也不提供任何特定于供应商的功能(如果有)。除非您的事件对所有用户都是静态的,否则我不建议走这条路。