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

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

簡介

這期雖然距離上期的時間比較久,但主要是個人我的緣由,而不是由於這期的內容難。這期的內容仍是比較簡單的,主要是一些概念和原理上的東西,實操方面很是容易,因此和上期同樣,主要把視頻看看就差很少啦:佈局

若是看不到視頻,能夠點 這裏 直接去 B 站看;若是你在海外,能夠點 這裏 去 YouTube 上看。3d

總結

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

定製 Layout 內部佈局的方式

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

重寫 onMeasure() 的三個步驟:

  1. 調用每一個子 View 的 measure() 來計算子 View 的尺寸
  2. 計算子 View 的位置並保存子 View 的位置和尺寸
  3. 計算本身的尺寸並用 setMeasuredDimension() 保存

計算子 View 尺寸的關鍵

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

子 View 的 MeasureSpec 的計算方式:

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

重寫 onLayout() 的方式

onLayout() 裏調用每一個子 View 的 layout() ,讓它們保存本身的位置和尺寸。視頻

練習項目

這期仍是沒有練習項目。xml

降速生產聲明

最近把 HenCoder 作得愈來愈溜的同時,各類工做上的事情和一些我的私事也突然蜂擁而至。因爲我的能力有限,接下來 HenCoder 將會被迫進一步下降產出速度。開發

呼……在將來的某個時間,咱們下期再見啦!get

以爲贊?

那就關注一下?↓↓↓it

相關文章
相關標籤/搜索