定制 Layout 內(nèi)部布局的方式
- 重寫 onMeasure() 來計算內(nèi)部布局
- 重寫 onLayout() 來擺放子 View
重寫 onMeasure() 的三個步驟: - 調(diào)用每個子 View 的 measure() 來計算子 View 的尺寸
- 計算子 View 的位置并保存子 View 的位置和尺寸
- 計算自己的尺寸并用 setMeasuredDimension() 保存
計算子 View 尺寸的關(guān)鍵
計算子 View 的尺寸俊庇,關(guān)鍵在于 measure() 方法的兩個參數(shù)——也就是子 View 的
兩個 MeasureSpec 的計算靡狞。
子 View 的 MeasureSpec 的計算方式:
結(jié)合開發(fā)者的要求(xml 中 layout_ 打頭的屬性)和自己的可用空間(自己的
尺寸上限 - 已用尺寸)
尺寸上限根據(jù)自己的 MeasureSpec 中的 mode 而定
EXACTLY / AT_MOST:尺寸上限為 MeasureSpec 中的 size
UNSPECIFIED:尺寸無上限
重寫 onLayout() 的方式
在 onLayout() 里調(diào)用每個子 View 的 layout() ,讓它們保存自己的位置和尺
寸。