2012-05-02 15 views
11

Ho bisogno di accedere alla larghezza e all'altezza già valutate di tutti i componenti in Vista frammento. Quindi ho bisogno di una notifica che mi dica, quella visione della fase di impaginazione dei frammenti è già stata fatta.Ottieni larghezza e altezza dei componenti in Vista frammento

Nell'attività posso utilizzare il metodo del ciclo di vita onWindowFocusChanged(boolean hasFocus), ma il frammento non ha questo metodo.

L'unico modo che ho trovato è utilizzare getView().addOnLayoutChangeListener(). Ma chiama più volte e solo l'ultima chiamata è utile per me.

Esiste un modo migliore per chiamare alcuni dopo che il layout è stato eseguito in frammento?

+0

Domanda correlata http://stackoverflow.com/questions/14397959/capture-layout-resize-before-api-11 –

risposta

1

È possibile attivare manualmente un passaggio di layout: è sufficiente chiamare View.measure(int,int) con MeasureSpecs appropriato. Per esempio se il frammento deve essere collegato a un parentView vista primaria, e si desidera avere la stessa dimensione, faresti questo:

View fragmentView = fragment.getView(); 
fragmentView.measure(MeasureSpec.makeMeasureSpec(parentView.getMeasuredWidth(), 
               MeasureSpec.EXACTLY), 
        MeasureSpec.makeMeasureSpec(parentView.getMeasuredHeight(), 
               MeasureSpec.EXACTLY)); 

più su come il provvedimento/layout di lavoro passa: http://developer.android.com/reference/android/view/View.html#Layout

+0

Ma la misura fornisce solo la dimensione consigliata, la dimensione reale è nota dopo il passaggio del layout. E non ho bisogno di eseguirlo manualmente, perché Android lo esegue di nuovo da solo (credo). – ATom

+0

In realtà non è solo una misura consigliata. Il passaggio di misura viene utilizzato per dire che "questo è ciò che ottieni, usalo come preferisci". Ad esempio in un controllo ListView, il vincolo per la larghezza è ESATTAMENTE, e per l'altezza non è valido. Hai ragione nel ritenere che le dimensioni misurate non siano sempre le stesse delle dimensioni del layout, ma lo è quasi sempre. Non sono sicuro di cosa stai provando a fare? –

+0

Ho solo bisogno di essere avvisato dopo che il frammento e il suo contenuto hanno già completato la misura e il passaggio del layout e tutte le dimensioni sono definitive. – ATom

Problemi correlati