实用 AI

可在线运行 AI 集合,涵盖 AI 文案生成、写作辅助、AI 绘图与照片修复、AI 配音、字幕生成、语音转录以及 AI 视频创作和数字人等多种 AI 服务

查看详情

自定义View之onLayout

Android面试技术要点汇总
2021-05-17 14:29 · 阅读时长6分钟

在自定义普通View时,会重写onDraw和onMeasure,不会重写onLayout,因为它主要是用于布局子View用的,只有在自定义ViewGroup时才会用到,本文涉及的所有代码都在文章末尾。

下面自定义一个FlexLayout,实现优先横行排列,当横行空间不够时可以换行的容器,宽高能够自适应,效果图如下

  • 数量超过一行时
自定义View之onLayout
  • 数量不超过一行时
自定义View之onLayout

实现大致可以分为以下几个步骤:

  1. 在onMeasure中计算出所有子View的大小,根据排版规则,计算出自身的测量大小。
  2. 在onLayout中遍历所有的子View,根据排版规则给子View设置位置。

注意:在计算的时候需要考虑自身的padding和子View的margin。

提示:默认情况下,ViewGroup中的onDraw不会调用,当给ViewGroup设置背景色之后,onDraw会被调用。

关于onMeasure可参考:自定义View之onMeasure

注释

主要代码如下

加载中...
项目完整代码如下
加载中...
自定义viewonLayoutandroidview