2013-01-25 130 views
0

例如,頂層LinearLayout視圖具有300個子視圖。但設備屏幕尺寸只顯示11個子視圖一次。 android如何計算一次可以顯示多少個子視圖?一個視圖如何知道它會被繪製?

編輯
在我的工作,一個情況是這樣的: 的父LinearLayout中觀點可能有數百個孩子視圖。爲了更好的表現,我的解決方案就像這樣:像懶加載。父視圖繪製子視圖有效

  1. 列表列表=新的ArrayList(); //包含使用構造查看對象
  2. 默認負載5子查看實體對象。
  3. 父LinearLayout視圖最後一個子視圖是自定義加載視圖,我已經覆蓋了它的onDraw()方法。如果加載視圖是繪製的,這意味着我需要得到下5個子視圖(從列表中獲取下5個對象,並創建相應的視圖)。


我想知道android框架如何處理這種情況?

+0

讀從這裏http://developer.android.com/reference/android/ MeasureSpec.UNSPECIFIED view/View.MeasureSpec.html –

回答

0

父LinearLayout視圖可能有數百個子視圖。爲了獲得更好的性能,我的解決方案如下:像懶加載。

LinearLayout與(可能)幾百子視圖那種違背更好的性能。我認爲你在尋找的是一個ListView與無盡的適配器(一個簡單的谷歌搜索將顯示如何實現它,而不是那麼困難)。只要到達最後一個加載的元素,該適配器就會開始加載視圖(加載新視圖時顯示加載視圖)。

如果你仍然想使用LinearLayout

如果你只是想使LinearLayout填滿屏幕的內容時,它的第一個規定,您可以在onCreate方法張貼在您的視圖之一Runnable (如果這是您首先填充LinearLayout的地方)。在那Runnable找到LinearLayout的高度,並將其與當前現在的孩子的高度相比較。如果組合子高度較小,則高度將增加更多視圖以進行補償。

如果LinearLayout處於ScrollView,你要添加其他孩子當加載視圖變得可見然後監視ScrollView的滾動和當加載視圖變得可見添加新的兒童。通過檢查用戶滾動的量與當前存在的LinearLayout兒童的總高度相比,看到加載視圖何時變得可見。

初始響應:

你的問題有點含糊關於你想知道什麼。如果你有特定的問題,你應該從那開始。

例如,頂級LinearLayout視圖有300個子視圖。但是 設備屏幕尺寸僅顯示11個子視圖一次。

請不要讓自己陷入這樣的場景。如果內存不足(即所有這些視圖將保留在內存中),那麼這些視圖數量太大會導致性能不佳甚至應用程序崩潰。

android如何計算一次有多少個子視圖可以顯示?

每個ViewViewGrouponMeasure方法來衡量本身和它的孩子(如果可用)。該LinearLayout將有一個名爲其onMeasure方法,在這種方法中,將測量它的孩子(與措施method)給他們,他們應該多大一些建議(在LinearLayout接收它應該從它的父有多大的一些建議)。如果您想了解如何完成此操作,請查看LinearLayout的源代碼。

視圖如何知道它會被繪製?

我不明白你想知道什麼。要在屏幕上繪製視圖,將調用onDraw方法。

+0

謝謝你的回答。我想知道android如何處理這個細節。我看到LinearLayout源代碼,找不到計算邏輯。 – boiledwater

+0

@boiledwater如果你看看源代碼的'LinearLayout'你會看到'onMeasure' ** **如何測量它的chidlren。該'onMeasure'回調將通過該系統,只要有需要顯示/重新顯示視圖層次調用。 – Luksprog

+0

請參閱編輯。 – boiledwater

0

具有u使用滾動條頂層的LinearLayout視圖中,並在該佈局的簡單添加子視圖...

相關問題