Come posso creare una vista settimanale del calendario per un’applicazione Android Honeycomb?

Sto lavorando a un’applicazione Android (v3.0) che ha l’obbligo di imitare il layout del calendario settimanale trovato su Google Calendar:

Layout settimanale di Google Calendar

Gli eventi saranno basati su richieste esterne tramite l’API di Google Calendar (ho già questa parte funzionante). Utilizzando l’API, posso ottenere un elenco di eventi per la settimana, con ogni evento che ha un data / ora di inizio e fine. Vorrei utilizzare questi dati per mostrare gli eventi programmati agli utenti dell’applicazione in una vista simile a quella precedente.

Ecco cosa ho finora:

My Prototype Calendar View

L’XML viene visualizzato di seguito:

               "                                                                                  

Il mio approccio era di rendere 40dp pari a 1 ora. Pertanto, ogni volta che desidero aggiungere un evento della durata di 1,5 ore, creerò un pulsante di 60 dpi che inserirò nella posizione esatta in cui inizia l’ora (12am = 0dp dall’alto, 1pm = 40dp dall’alto , 2pm = 80d dall’alto, ecc.).

Le mie domande sono:

  1. C’è un modo migliore per farlo?
  2. Come posso convertire il mio XML in vista stand-alone che può essere aggiunto a qualsiasi progetto Android? (Ho in programma forse di creare un post sul blog sul prodotto finale)

Grazie!

Ho finito per seguire un approccio simile al mio post originale. Ho creato una vista di scorrimento con un layout lineare al suo interno. Ho quindi aggiunto sette layout relativi al layout lineare. Ciascuno dei layout relativi è un giorno. Mi sono assicurato che l’altezza di questi layout fosse pari al numero di minuti in un giorno. Ciò renderebbe 1 ora = 60 minuti = 60 dp, il che rende più facile la misurazione delle altezze degli eventi. Per gli eventi, ho creato una visualizzazione personalizzata in grado di visualizzare l’ora di inizio e di fine dell’evento, nonché il titolo dell’evento. Gli eventi sono stati aggiunti ai relativi layout con una proprietà layout_marginTop, il cui valore è uguale all’ora di inizio dell’evento in minuti dall’inizio del giorno. Questo sembrava funzionare bene.

Ecco un’anteprima di come è finita:

Anteprima del calendario

Ecco il layout XML: http://pastebin.com/jT4wQxeb

Il codice è troppo lungo per adattarsi alla risposta.

Nota: calendar_zebra è semplicemente un layout alto 60 * 24 = 1440 dpi con 1 orizzontale in alta risoluzione s con uno sfondo grigio uniforms posizionato ogni 60 dpi. Ognuno rappresenta un marker per un’ora di tempo.

1. Ecco cosa scopro dalla fonte di Calendar

Crea una vista personalizzata ( DayView per l’agenda in un giorno) per l’intero layout nel tuo xml.

Quindi disegna la canvas usando il rettangolo e il testo come quello che puoi vedere nell’app quando viene chiamato onDraw() .

La vista implementa OnClickListener e OnLongClickListener per l’evento. Quando fai clic sulla canvas, trasferisce la posizione del clic all’Evento con Data e ora corrispondenti (quindi ha calcolato un sacco di dimensioni correlate per evento, margine, evento di un giorno intero quando viene chiamato override onSizeChanged() ), quindi avvia il Attività se tale evento esiste, altrimenti crea un nuovo evento.

2.È necessario creare una class estende View, ad esempio DayView , quindi è necessario aggiungere questo in attrs.xml

     

Quindi puoi usarlo come tag xml nel layout con il nome del tuo pacchetto. come qui:

  

Qui puoi trovare il campione per farlo