2012-05-02 18 views
11

Potrzebuję dostępu do już oszacowanej szerokości i wysokości wszystkich komponentów w widoku Fragment. Potrzebuję więc powiadomienia, które mówi mi, że widok fazy układania fragmentów już jest zrobiony.Pobierz szerokość i wysokość komponentów w widoku Fragmenty

W działaniu mogę użyć metody cyklu życia onWindowFocusChanged(boolean hasFocus), ale fragment nie ma tej metody.

Jedynym sposobem, jaki znalazłem, jest użycie getView().addOnLayoutChangeListener(). Ale to połączenie wiele razy i tylko ostatnie połączenie jest dla mnie przydatne.

Czy istnieje lepszy sposób wywołania niektórych po wykonaniu układu w widoku fragmentu?

+0

Powiązane pytanie http://stackoverflow.com/questions/14397959/capture-layout-resize-before-api- 11 –

Odpowiedz

1

W rzeczywistości można ręcznie uruchomić przejście układu - wystarczy zadzwonić pod numer View.measure(int,int) za pomocą odpowiednich mierników MeasureSpec. Na przykład, jeśli fragment ma być dołączony do widoku rodzica parentView, a chcesz go mieć ten sam rozmiar, można to zrobić:

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

Więcej o tym, jak środek/układ przechodzi praca: http://developer.android.com/reference/android/view/View.html#Layout

+0

Ale pomiar daje tylko zalecany rozmiar, rzeczywisty rozmiar jest znany po przejściu układu. I nie potrzebuję go uruchamiać ręcznie, ponieważ Android uruchamia go ponownie (chyba). – ATom

+0

To nie jest po prostu zalecany rozmiar. Przepust miarki służy do informowania widoku, że "to jest to, co dostajesz, używaj go, jak chcesz". Na przykład w Widoku, ograniczenie szerokości jest DOKŁADNIE, a dla wysokości jest NIEZGODNE. Masz rację, że zmierzona wielkość nie zawsze jest taka sama jak rozmiar układu, ale prawie zawsze jest. Nie jestem do końca pewien, co próbujesz zrobić? –

+0

Muszę być powiadomiony tylko po tym, jak fragment i jego zawartość już zakończyły pomiar i przejście układu, a wszystkie wymiary są ostateczne. – ATom

Powiązane problemy