martedì 7 ottobre 2008

Contenitore con bordi per BlackBerry

Ho iniziato a sviluppare l'applicazione per BlackBerry di cui vi ho parlato nei post precedenti, cercando di sfruttare tutti i momenti liberi che sono riuscito a trovare. Per l'interfaccia utente mi sono ispirato alle varie applicazioni standard preinstallate sul telefonino (ad esempio Tasks), quindi ho creato uno schermo principale e uno di dettaglio, con una serie di campi di input con cui l'utente può interagire per inserire e modificare le informazioni. Ho cercato di organizzare questo form suddividendo i campi in gruppi logici, racchiusi all'interno di aree delimitate in qualche modo. Il candidato ideale per svolgere questo ruolo è la classe Border (che si trova nel package net.rim.device.api.ui.decor), da applicare ad un componente (in questo caso un contenitore) tramite il metodo setBorder della classe Field. Dopo aver scritto tutto il codice, ecco la sgradita sorpresa: il programma funziona senza problemi con l'emulatore del modello 9000, ma utilizzando un modello precedente si ottiene un errore bloccante.Dopo un po' di ricerche, scopro (con una certa incredulità per tale mancanza) che tutto questo funziona solo con il JDE (e di conseguenza con la libreria di runtime) 4.6.0. Suddetti classi e metodi nella versione 4.5.0 non esistono proprio e quindi non si può che verificare l'errore di Class Not Found.

Come ovviare a questa situazione? Eliminando l'uso del Border tutto va a meraviglia, ma il risultato è abbastanza penoso da un punto di vista estetico. Dopo vari tentativi falliti (ad esempio l'uso di una bitmap come sfondo del contentore), arrivo alla soluzione attuale, che mi soddisfa abbastanza, anche se può essere sicuramente migliorata. Ho creato una sottoclasse di VerticalFieldManager (package net.rim.device.api.ui.container), visto che i vari campi devono essere disposti verticalmente, e ho sovrascritto il metodo paintBackground. In questo metodo ho riempito il rettangolo che rappresenta il contenitore con un colore di sfondo e su questo ho disegnato un rettangolo con i bordi stondati più piccolo, riempito di bianco. Il risultato è visibile in figura:
Per completare il componente bisognerebbe dare un maggior effetto tridimensionale, come di profondità alla parte interna, ma per ora può andare bene anche così. Ho preparato un archivio contenente il codice sorgente del RoundedVerticalFieldManager (package it.datafox.bb.ui.container), che può essere scaricato da qui. Per posizionare correttamente i componenti all'interno del contenitore è necessario utilizzare il metodo setPadding, come nel seguente esempio:
provaVFM.setPadding(new XYEdges(7, 5, 6, 7));

Alcune novità anche per quanto riguarda il sito Web di DataFox. Abbiamo infatti creato tante sottosezioni relative ai moduli di Desmo Finanza e di Desmo Monitor Investimenti. Quindi funzionalità importanti come il Controllo Limiti Normativi, il Registro Ordini, il Calcolo dei Rendimenti, la Performance Contribution e la Performance Attribution hanno finalmente lo spazio e l'approfondimento che meritano.

Nessun commento:

Ricerca personalizzata