HenCoder Android UI 部分 2-3 定製 Layout 的內部佈局

扔物線發表於2018-01-15

這期是 HenCoder 佈區域性分的最後一期:重寫 onMeasure()onLayout() 來定製 Layout 的內部佈局。

簡介

這期雖然距離上期的時間比較久,但主要是我的個人原因,而不是因為這期的內容難。這期的內容還是比較簡單的,主要是一些概念和原理上的東西,實操方面非常容易,所以和上期一樣,主要把視訊看看就差不多啦:

如果看不到視訊,可以點 這裡 直接去 B 站看;如果你在海外,可以點 這裡 去 YouTube 上看。

總結

這期的文章依然是隻有總結。但這次主要是因為我最近實在太多事情了……

定製 Layout 內部佈局的方式

  1. 重寫 onMeasure() 來計算內部佈局
  2. 重寫 onLayout() 來擺放子 View

重寫 onMeasure() 的三個步驟:

  1. 呼叫每個子 View 的 measure() 來計運算元 View 的尺寸
  2. 計運算元 View 的位置並儲存子 View 的位置和尺寸
  3. 計算自己的尺寸並用 setMeasuredDimension() 儲存

計運算元 View 尺寸的關鍵

計運算元 View 的尺寸,關鍵在於 measure() 方法的兩個引數——也就是子 View 的兩個 MeasureSpec 的計算。

子 View 的 MeasureSpec 的計算方式:

  • 結合開發者的要求(xml 中 layout_ 打頭的屬性)和自己的可用空間(自己的尺寸上限 - 已用尺寸)
  • 尺寸上限根據自己的 MeasureSpec 中的 mode 而定
    • EXACTLY / AT_MOST:尺寸上限為 MeasureSpec 中的 size
    • UNSPECIFIED:尺寸無上限

重寫 onLayout() 的方式

onLayout() 裡呼叫每個子 View 的 layout() ,讓它們儲存自己的位置和尺寸。

練習專案

這期還是沒有練習專案。

降速生產宣告

最近把 HenCoder 做得越來越溜的同時,各種工作上的事情和一些個人私事也忽然蜂擁而至。由於個人能力有限,接下來 HenCoder 將會被迫進一步降低產出速度。

呼……在未來的某個時間,我們下期再見啦!

覺得贊?

那就關注一下?↓↓↓

HenCoder Android UI 部分 2-3 定製 Layout 的內部佈局

相關文章