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

相关文章
相关标签/搜索