2012-05-02 80 views
11

我需要訪問已評估的片段視圖中所有組件的寬度和高度。所以我需要一些告訴我的通知,片段佈局階段的視圖已經完成。獲取片段視圖中組件的寬度和高度

在活動中我可以使用onWindowFocusChanged(boolean hasFocus)生命週期方法,但片段沒有這個方法。

我發現的唯一方法是使用getView().addOnLayoutChangeListener()。但它多次呼叫,只有上次呼叫對我有用。

存在任何更好的方式如何在片段的視圖中完成佈局後調用一些?

+0

相關問題http://stackoverflow.com/questions/14397959/capture-layout-resize-before-api-11 –

回答

1

您實際上可以手動觸發佈局傳遞 - 您只需使用適當的MeasureSpecs調用View.measure(int,int)即可。例如,如果這個片段被連接到父視圖parentView,你希望它具有相同的大小,你可以這樣做:

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

更多措施/佈局如何通過工作:http://developer.android.com/reference/android/view/View.html#Layout

+0

但測量只給出建議的大小,實際大小是知道佈局後通過。我不需要手動運行它,因爲Android本身再次運行它(我認爲)。 – ATom

+0

它實際上不只是推薦的尺寸。度量通過用於告訴觀點「這是你得到的,按你的意願使用它」。例如在一個ListView中,寬度的約束是正確的,而對於高度則是未知。您所測量的尺寸並不總是與展開的尺寸相同,但它幾乎總是如此。我不確定你想要做什麼? –

+0

我只需要在片段後通知它,並且其內容已經完成測量和佈局傳遞並且所有維度都是最終的。 – ATom