2013-07-22 12 views
5

Jestem bardzo zdezorientowany, jak używać kolorów w Kalendarzu Android. Mogę dodawać zdarzenia w porządku, ale gdy próbuję wstawić jeden z określonym kolorem, ta preferencja wydaje się być ignorowana dla domyślnego koloru kalendarza (jasnoniebieski).Kalendarz na AndroidProwizje zdarzeń Kolor

Chyba nie jestem do końca pewien, w jaki sposób kolory są używane. Zastanawiam się, czy ktoś może być tak uprzejmy, aby rzucić trochę światła na tę sprawę.

Tymczasem tutaj jest mój kod (parametr zdarzeń jest klasa zwyczaj, wiem nazwa dostaje mylące):

public long insert(Event event) throws ParseException{ 

    ContentValues eventValues = new ContentValues(); 
    eventValues.put("calendar_id", 1); 
    eventValues.put(Events.SYNC_DATA1, event.getId()); 
    eventValues.put(Events.TITLE, event.getTitle()); 
    eventValues.put(Events.DESCRIPTION, event.getTitle()); 
    eventValues.put(Events.EVENT_COLOR, Color.RED); 
    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()); 
} 

Dziękuję.

Odpowiedz

3

Cóż, domyślam się, że zostałem spalony tamtej nocy. Jednak na wypadek, gdyby ktoś inny tu trafił, wystarczyło krótko wyjaśnić interakcję Kalendarz-> Wydarzenia, o ile ją dostałem.

Krótka historia: kolory zdarzeń zależą od kalendarza, w którym zostały wprowadzone. Dlaczego istnieje kolumna events_color, jeśli zostanie nadpisana przez kolor kalendarza? Chciałem wiedzieć.

Tak, po skonfigurowaniu fantazyjne SyncAdapter, użytkownik itp trzeba utworzyć nowy kalendarz:

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

Proszę zauważyć Kładę kolor w kolumnie CALENDAR_COLOR, w tym przypadku” m parsując coś w stylu # 000000 w Color.BLACK. Zwróć też uwagę na wartość w ACCOUNT_TYPE. Z tego, co zebraliśmy, nie ma innego sposobu obejścia tego.

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

Teraz umieszczam wydarzenie w kalendarzu (parametr calendarID). To wydarzenie zostanie wyświetlone z kolorem kalendarza.

1

Musisz użyć Events.EVENT_COLOR_KEY zamiast EVENT_COLOR (który jest tylko do odczytu). Wartość, której używasz, musi być COLOR_KEY z ColorsColumns table typu TYPE_EVENT.