首页 > 解决方案 > 更改 Android 日历事件的颜色

问题描述

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

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);

这是我想在日历应用程序中更改的内容的图片

标签: androidandroid-calendar

解决方案


EVENT_COLOR记录为由日历所属帐户的同步适配器编写。只有“拥有”日历的应用程序才应写入以下值:

这只能由给定帐户的同步适配器更新。

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

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


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

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


推荐阅读