Android日历提供程序事件颜色

Android日历提供程序事件颜色,android,colors,calendar,Android,Colors,Calendar,我最困惑的是如何在Android CalendarProvider中使用颜色。我可以添加事件,但当我尝试插入一个具有特定颜色的事件时,默认日历颜色(浅蓝色)的首选项似乎被忽略 我想我不太清楚颜色是如何使用的。我想知道是否有人能对这件事有所了解 同时,这里是我的代码(Event参数是一个自定义类,我知道名称会让人困惑): 谢谢。好吧,我想那天晚上我筋疲力尽了。然而,如果有其他人来到这里,就我所知,对日历->事件交互做一个简短的解释是公平的 长话短说:活动的颜色取决于您将其放入的日历。如果事件颜色列

我最困惑的是如何在Android CalendarProvider中使用颜色。我可以添加事件,但当我尝试插入一个具有特定颜色的事件时,默认日历颜色(浅蓝色)的首选项似乎被忽略

我想我不太清楚颜色是如何使用的。我想知道是否有人能对这件事有所了解

同时,这里是我的代码(Event参数是一个自定义类,我知道名称会让人困惑):


谢谢。

好吧,我想那天晚上我筋疲力尽了。然而,如果有其他人来到这里,就我所知,对日历->事件交互做一个简短的解释是公平的

长话短说:活动的颜色取决于您将其放入的日历。如果事件颜色列被日历颜色覆盖,为什么会有事件颜色列?我想我知道

因此,一旦设置了您的syncadapter、用户等,您需要创建一个新日历:

public long insertCalendar(EventType eventType) {

    Uri calUri = CalendarContract.Calendars.CONTENT_URI;
    ContentValues cv = new ContentValues();
    cv.put(CalendarContract.Calendars.ACCOUNT_NAME, "DUMMY");
    cv.put(CalendarContract.Calendars.ACCOUNT_TYPE, CalendarContract.ACCOUNT_TYPE_LOCAL);
    cv.put(CalendarContract.Calendars.NAME, eventType.getDescription());
    cv.put(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, eventType.getDescription());
    cv.put(CalendarContract.Calendars.CALENDAR_COLOR, Color.parseColor(eventType.getColor()));
    cv.put(CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL, CalendarContract.Calendars.CAL_ACCESS_OWNER);
    cv.put(CalendarContract.Calendars.OWNER_ACCOUNT, true);
    cv.put(CalendarContract.Calendars.VISIBLE, 1);
    cv.put(CalendarContract.Calendars.SYNC_EVENTS, 1);
    //cv.put(CalendarContract.Calendars.CAL_SYNC1, eventType.getId());

    calUri = calUri.buildUpon()
        .appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true")
        .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME, "DUMMY")
        .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE, CalendarContract.ACCOUNT_TYPE_LOCAL)
        .build();

    Uri result = mContentResolver.insert(calUri, cv);
    return Long.parseLong(result.getLastPathSegment());
}
请注意,我在CALENDAR_color列中添加了一种颜色,在本例中,我将类似于#000000的内容解析为color.BLACK。还要注意ACCOUNT_TYPE中的值。从我收集的信息来看,似乎没有其他方法可以解决这个问题

public long insert(Event event, long calendarID) throws ParseException {

    EventTypeDal adapter = new EventTypeDal();
    EventType et = adapter.GetEventTypeById(event.getFkEventType());

    ContentValues eventValues = new ContentValues();

    eventValues.put("calendar_id", calendarID); 
    //eventValues.put(Events.SYNC_DATA1, event.getId());
    eventValues.put(Events.TITLE, event.getTitle());
    eventValues.put(Events.DESCRIPTION, et.getDescription());

    eventValues.put(Events.EVENT_TIMEZONE, "Europe/Rome");

    eventValues.put(Events.DTSTART, event.getStart().getTime());
    eventValues.put(Events.DTEND, event.getEnd().getTime());

    Uri eventUri = mContentResolver.insert(Uri.parse(eventUriString).buildUpon().appendQueryParameter(android.provider.CalendarContract.CALLER_IS_SYNCADAPTER,"true").appendQueryParameter(Calendars.ACCOUNT_NAME, "DUMMY").appendQueryParameter(Calendars.ACCOUNT_TYPE, "accountType").build(), eventValues);
    return Long.parseLong(eventUri.getLastPathSegment());
}

现在我把一个事件放在日历中(calendarID参数)。此事件将以日历的颜色显示。

您需要使用Events.event\u color\u键,而不是event\u color(只读)。您使用的值必须是类型为\u事件的颜色\u键

public long insert(Event event, long calendarID) throws ParseException {

    EventTypeDal adapter = new EventTypeDal();
    EventType et = adapter.GetEventTypeById(event.getFkEventType());

    ContentValues eventValues = new ContentValues();

    eventValues.put("calendar_id", calendarID); 
    //eventValues.put(Events.SYNC_DATA1, event.getId());
    eventValues.put(Events.TITLE, event.getTitle());
    eventValues.put(Events.DESCRIPTION, et.getDescription());

    eventValues.put(Events.EVENT_TIMEZONE, "Europe/Rome");

    eventValues.put(Events.DTSTART, event.getStart().getTime());
    eventValues.put(Events.DTEND, event.getEnd().getTime());

    Uri eventUri = mContentResolver.insert(Uri.parse(eventUriString).buildUpon().appendQueryParameter(android.provider.CalendarContract.CALLER_IS_SYNCADAPTER,"true").appendQueryParameter(Calendars.ACCOUNT_NAME, "DUMMY").appendQueryParameter(Calendars.ACCOUNT_TYPE, "accountType").build(), eventValues);
    return Long.parseLong(eventUri.getLastPathSegment());
}