2010-02-20 17 views
6

Sto cercando un widget che si comporta in modo simile al widget della galleria ma scorre verticalmente anziché orizzontalmente. Ho cercato su Google tutto intorno e apparentemente la risposta è che nessun widget pre-creato esiste.Android: una galleria verticale?

Così mi sono detto, vabbè, guarderò la classe della galleria nella fonte Android e la modifico per scorrere in verticale invece. Non così semplice. L'SDK Android si nasconde molto lontano (comprensibilmente per la manutenzione del framework), ma rende anche molto difficile estendere i widget. La classe gallery, ad esempio, utilizza un sacco di variabili membro dal suo genitore, AbsSpinner (mSelectedPosition, etc.etc.) E genitore del genitore, ecc ... che non sono affatto accessibili dal punto di vista dello sviluppatore dell'app. Senza accesso a quelle variabili membro, non posso usare un codice simile dalla classe gallery per il mio uso personale.

A corto di spostare la catena di ereditarietà e inserire il codice sorgente di quelle classi parent tutte nel mio progetto, o scrivere il widget tutto da zero senza utilizzare i widget di framework esistenti che hanno già risolto il problema, non riesco a trovare un modo per ottenere una galleria a scorrimento verticale.

C'è un modo migliore per aggirare? Perché la struttura Android rende così difficile estendere il widget?

+1

A seconda del comportamento necessario, perché non utilizzare solo un normale ListView, all'interno di un LinearLayout orizzontale con un ImageView sull'altro lato? –

risposta

12

C'è un modo migliore per aggirare?

Dato che non sappiamo cosa state costruendo, è impossibile dirlo. Sono d'accordo con il commento di Yoni Samlan che un ListView potrebbe essere sufficiente per le tue esigenze.

Perché la struttura Android rende il widget di estensione così difficile?

Mentre è concepibile che un reimplementato Gallery potrebbe rendere più semplice per voi per rendere orientare in modo diverso, il nucleo team di Android deve pesare come reimplementazione contro altre priorità di sviluppo.

Una di queste priorità è la fedeltà dell'SDK. Vogliono assicurarsi che, per quanto possibile, il codice scritto per Android 1.5 possa essere eseguito su Android 2.1 senza modifiche. Questo li limita in due modi. Innanzitutto, non possono semplicemente modificare lo Gallery esistente, ad esempio, per soddisfare i tuoi desideri, se così facendo li interrompono l'API esistente. In secondo luogo, il core team di Android non esporrà nuovi metodi o classi, anche se potrebbero essere utili a sviluppatori di terze parti, a meno che e fino a quando il team non sia pronto a supportare tali metodi o classi per il lungo periodo.

Android è stato inizialmente scritto prima dell'esistenza di un SDK. Questo è il motivo per cui la maggior parte delle applicazioni integrate (ad es. Calcolatrice) non possono essere create con l'SDK da solo, ma devono essere costruite come parte di un'immagine del firmware. Allo stesso modo, il team principale di Android ha dovuto prendere una decisione, come parte della creazione dell'SDK iniziale, su come prendere il codice esistente e creare materiale pubblico con cui lavorare e cose private/protette che non possiamo, tenendo presente la fedeltà dell'SDK. Come avrai notato, Android è vasto e quindi la creazione dell'SDK deve aver richiesto una quantità considerevole di tempo per il personale. Riscrivere un sacco di questo per aumentare le probabilità che qualcuno possa, ad esempio, creare un verticale Gallery non era probabilmente in cima alla loro lista.

In un mondo ideale, sì, saremmo in grado di estendere più facilmente i widget integrati e modificare in modo significativo il loro comportamento. Allo stesso modo, in un mondo ideale, avrei i capelli ...:-)

+9

+1 per, 'Allo stesso modo, in un mondo ideale, avrei i capelli ... :-)' – Samuel

Problemi correlati