android - 更改 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);
解决方案
EVENT_COLOR
记录为由日历所属帐户的同步适配器编写。只有“拥有”日历的应用程序才应写入以下值:
这只能由给定帐户的同步适配器更新。
您的应用程序可能会在直接访问日历时强制使用特定值(也就是说,不是通过意图,而是通过直接查询ContentResolver
,如果您具有适当的权限)。但是,它们可能会在没有通知的情况下被“拥有”应用程序覆盖,不一定跨设备同步,并且可能会导致其他问题。我不建议这样做。
文档不是很清楚EVENT_COLOR_KEY
,因此如果存在适合您的应用程序的现有事件颜色,则该列可能是一个选项(请注意,现有事件颜色可能取决于日历和用户,不要硬编码颜色键!)。我认为直接使用ContentResolver
是必要的,Intent
只有在用户选择的日历应用程序支持该功能时才使用(我不知道是否/有多少日历应用程序支持该功能)。
如果您需要独立于现有日历颜色和安装的日历应用程序的自定义颜色,您可以创建与您的应用程序相关联的自己的日历。为整个日历分配颜色很简单 ( CALENDAR_COLOR
)。由于您的应用程序是该日历的所有者,因此您可以自由更改每个事件的任何方面。
但是,这些事件不属于您的用户现有日历:它们不会跨设备同步,并且不提供任何供应商特定的功能(如果有)。除非您的事件对所有用户都是静态的,否则我不建议您沿着这条路线走。
推荐阅读
- c# - 是否可以在事件查看器中使用 ETW 登录到子文件夹时使用自定义名称创建事件通道?
- c# - 如何在asp.net web api中将图像路径转换为http url?
- python - TypeError: unhashable type: 'set' in Flask Form 上传文件
- javascript - 如果表单已验证,如何转到另一个 HTML 页面,如果未验证,如何留在同一页面?
- sqlite - “INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL”是否保证是“rowid”的别名?
- python - 在 Seaborn displot 中显示百分比标签
- python - 如何将我的代码转换为 Lists Comprehension?
- kubernetes - 在 kustomization 中从另一个目录引用资源 yaml
- amazon-web-services - 如何使用 AWS CodeDeploy 到 ec2 nginx 文件夹?
- c# - 如何在不同颜色的日历控件中显示数据库存储的多个日期