這期是 HenCoder 佈區域性分的最後一期:重寫 onMeasure()
和 onLayout()
來定製 Layout
的內部佈局。
簡介
這期雖然距離上期的時間比較久,但主要是我的個人原因,而不是因為這期的內容難。這期的內容還是比較簡單的,主要是一些概念和原理上的東西,實操方面非常容易,所以和上期一樣,主要把視訊看看就差不多啦:
總結
這期的文章依然是隻有總結。但這次主要是因為我最近實在太多事情了……
定製 Layout 內部佈局的方式
- 重寫
onMeasure()
來計算內部佈局 - 重寫
onLayout()
來擺放子 View
重寫 onMeasure() 的三個步驟:
- 呼叫每個子 View 的
measure()
來計運算元 View 的尺寸 - 計運算元 View 的位置並儲存子 View 的位置和尺寸
- 計算自己的尺寸並用
setMeasuredDimension()
儲存
計運算元 View 尺寸的關鍵
計運算元 View 的尺寸,關鍵在於 measure()
方法的兩個引數——也就是子 View 的兩個 MeasureSpec
的計算。
子 View 的 MeasureSpec 的計算方式:
- 結合開發者的要求(xml 中
layout_
打頭的屬性)和自己的可用空間(自己的尺寸上限 - 已用尺寸) - 尺寸上限根據自己的
MeasureSpec
中的 mode 而定- EXACTLY / AT_MOST:尺寸上限為
MeasureSpec
中的size
- UNSPECIFIED:尺寸無上限
- EXACTLY / AT_MOST:尺寸上限為
重寫 onLayout() 的方式
在 onLayout()
裡呼叫每個子 View 的 layout()
,讓它們儲存自己的位置和尺寸。
練習專案
這期還是沒有練習專案。
降速生產宣告
最近把 HenCoder 做得越來越溜的同時,各種工作上的事情和一些個人私事也忽然蜂擁而至。由於個人能力有限,接下來 HenCoder 將會被迫進一步降低產出速度。
呼……在未來的某個時間,我們下期再見啦!
覺得贊?
那就關注一下?↓↓↓