2015-05-23 8 views
19

Sto tentando di ottimizzare i miei listini, quando vado nelle opzioni sviluppatore e accendo "Mostra limiti layout" ho notato che l'app Gmail ha una gerarchia di visualizzazione completamente piatta? Come si ottiene questa magia nera?In che modo l'app Gmail raggiunge la sua gerarchia di visualizzazione semplice?

enter image description here

enter image description here

+1

Visualizzazioni personalizzate, molto probabilmente. – CommonsWare

+0

Mi piacerebbe conoscere anche questa magia nera –

+0

Significa che stanno disegnando l'intero listino all'interno del metodo onDraw per una vista personalizzata? Per qualcosa come la stella o le immagini dell'utente come si otterrebbe? Anche nell'app gmail, facendo clic sull'avatar si genera un effetto inverso, anche loro stanno disegnando quell'animazione? L'immagine stellare richiederebbe un percorso personalizzato? Questa è per me una magia completa. –

risposta

1

Beh, potrei sbagliarmi su pochi dettagli, ma stanno usando una visualizzazione personalizzata. Un widget, se vuoi.

In pratica, si dispone di una classe che estende qualcosa, molto probabilmente una vista, un LinearLayout o un RelativeLayout, piuttosto che si aggiungono a livello di codice gli elementi necessari e assicurarsi di avere metodi per accedere dall'esterno, in modo che quando crei un nuovo "coso", sarai in grado di dargli qualunque testo o immagini desideri.

Nel tuo caso, quello che vorrei fare è un widget che estende LinearLayout e vorrei aggiungere l'immagine, 3 textViews (nome, oggetto, posta effettiva) e un altro TextView per la data. Se vuoi anche la stella, questa sarà un'altra cosa aggiunta, un ImageView. Li muovi in ​​qualsiasi modo tu voglia, e questo è praticamente tutto.

Se vuoi un codice per questo, fammi sapere, ti darò qualche dettaglio in più se proprio ne hai bisogno.

+0

Ma non aggiungere l'immagine e 3 visualizzazioni di testo aggiungono ancora elementi alla gerarchia della vista? Non capisco perché quelle viste non hanno un layoutbound. Sto indovinando che il testo deve essere fatto con un metodo canvas.drawText(), ma non capisco come possano avere un metodo personalizzato di ondraw che anima anche gli avatar? Proverò il tuo suggerimento per vedere se in realtà rimuove i bozzetti di layout. –

+0

Beh, non ne sono sicuro, vuoi controllare questo, ma sono abbastanza sicuro che la gerarchia lo vede come una cosa. Ad esempio, se estendi la tua classe come LinearLayout, la vede come un LinearLayout. – Vlad

+0

È possibile che sia un FrameLayout o RelativeLayout con la vista più in alto (ordine z) che comprende l'altezza/larghezza completa? Forse questa vista in alto ignora o passa sugli eventi click per gestire il clic "stella"? Solo una supposizione selvaggia. – hungryghost

Problemi correlati