更改Android日历活动的颜色

时间:2018-08-31 12:01:05

标签: android android-calendar

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

res = df.sort_values(['a', 'b'])\
        .loc[(~df['a'].duplicated()) | df[['a', 'b']].duplicated(keep=False)]

print(res)

         a           b       c     d
0    11216  08-08-2018    2000   SIP
1    40277  28-08-2018    1000   SIP
2    44165  02-08-2018    8000  Lump
4    45845  16-08-2018   25000  Lump
6    52730  13-08-2018   10000  Lump
8    53390  20-08-2018  400000  Lump
9    56180  02-08-2018    1000  Lump
10   58537  11-07-2018    5000  Lump
14   85606  16-08-2018    3500   SIP
15   88327  06-08-2018    5000   SIP
16   90240  07-08-2018    2000   SIP
12  912813  15-08-2018  160001  Lump
13  912813  15-08-2018    6000   SIP

在这里我要设置颜色

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

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

1 个答案:

答案 0 :(得分:0)

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

  

这仅应由给定帐户的同步适配器更新。

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

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


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

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