在自定义view中打log,view的显示共有三种,visible、invisible和gone,分别看一下log:

gone

onVisibilityChangedconstruct 2 parametersonFinishInflateonVisibilityChangedonVisibilityChangedonRtlPropertiesChangedonRtlPropertiesChangedonAttachedToWindowonWindowVisibilityChangedonWindowFocusChanged

invisible

onVisibilityChangedconstruct 2 parameters .onFinishInflateonVisibilityChangedonVisibilityChangedonRtlPropertiesChangedonRtlPropertiesChangedonAttachedToWindowonWindowVisibilityChangedonMeasure , width : 1080  ; height: 1557onMeasure , width : 144  ; height: 1500onSizeChangedonLayout --> l: 0  ; r : 144  ; t: 57  ; b: 201  : changed :trueonMeasure , width : 1080  ; height: 1557onMeasure , width : 144  ; height: 1500onLayout --> l: 0  ; r : 144  ; t: 57  ; b: 201  : changed :falseonWindowFocusChanged

visible

construct 2 parameters .onFinishInflateonVisibilityChangedonVisibilityChangedonRtlPropertiesChangedonRtlPropertiesChangedonAttachedToWindowonWindowVisibilityChangedonMeasure , width : 1080  ; height: 1557onMeasure , width : 144  ; height: 1500onSizeChangedonLayout --> l: 0  ; r : 144  ; t: 57  ; b: 201  : changed :trueonMeasure , width : 1080  ; height: 1557onMeasure , width : 144  ; height: 1500onLayout --> l: 0  ; r : 144  ; t: 57  ; b: 201  : changed :falseonDrawonWindowFocusChanged

1、从中看到view默认为可见的,不是默认值时先调用 onVisibilityChanged ,但是此时该view的任何位置信息都不知道。

2、可见性改变后才是调用带有两个参数的构造函数

3、从xml 文件中 inflate 完成

4、将view 加到 window 中(View 是gone 的,那么View创建生命周期也就结束)

5、测量view的长宽(onMeasure)

6、定位View在父View中的位置(onLayout)--->(View 是invisible ,View 创建生命周期结束)

7、onDraw(只有可见的View 才在window 中绘制)

setContentView(new View(this))

construct 1 parameteronVisibilityChangedonVisibilityChangedonRtlPropertiesChangedonRtlPropertiesChangedonAttachedToWindowonWindowVisibilityChangedonMeasure , width : 1080  ; height: 1557onSizeChangedonLayout --> l: 0  ; r : 1080  ; t: 0  ; b: 1557  : changed :trueonMeasure , width : 1080  ; height: 1557onLayout --> l: 0  ; r : 1080  ; t: 0  ; b: 1557  : changed :falseonDrawonWindowFocusChanged

默认情况下view的长和宽默认和父view的长和宽一致。

销毁

onWindowFocusChanged
onWindowVisibilityChanged
onDetachedFromWindow

总结

View 的关键生命周期为

构造View --> onFinishInflate --> onAttachedToWindow --> onMeasure --> onSizeChanged --> onLayout --> onDraw --> onDetackedFromWindow

我是天王盖地虎的分割线

更多相关文章

  1. android fragment的显示隐藏生命周期简述
  2. Android通用生命周期
  3. Android ProgressBar 自定义样式(六),仿真QQ pad版加载(位置居中)
  4. 利用浏览器默认方法获取浏览器当前位置
  5. Android之ScrollView滚动到指定位置
  6. Android Studio中添加Permission权限的步骤与位置
  7. Android 代码当中动态改变某个控件的位置
  8. Android EditText插入字符串到光标所在位置和删除
  9. 【原创】Android 设置Dialog的长宽和位置

随机推荐

  1. android中launcher工作机制介绍
  2. Android获取本应用的MD5值
  3. Android使用Bundle进行数据传递分析
  4. Android(安卓)SharedPreferences的使用
  5. 基于android背景选择器selector的用法汇
  6. 关于 Android 平台开发相关的有哪些推荐
  7. android相机拍照
  8. Android开发常用工具查询网站链接
  9. android stdio 设置屏幕旋转后保存数据
  10. Google IO 2011最新技术分享