onCreate(), onFinishInflate(),onMeasure(),onLayout(),onDraw()Visibility …
onCreate():
调用了setContentView(),然后创建new DecorView(),并且把布局文件加载进DecorView,并没有调用onMeasure()方法;
onMeasure():
计算各控件的大小。系统在渲染时会调用各view的onMeasure方法。调用顺序是先调用子控件的onMeasure方法,再调用父控件的onMeasure方法
onLayout():
根据获取到的尺寸信息渲染这个view,onMeasure方法执行完后会回调onLayout方法。onSizeChanged方法执行完也会回调onLayout方法。调用顺序是先调用子控件的onLayout方法,再调用父控件的onLayout方法
onDraw():
根据布局的位置绘图;
onFinishInflate():
当View和他的所有子控件被XML布局文件填充完成时被调用,是在setContentView()方法加载解析布局文件完毕之后执行这个方法。
onAttachedToWindow():
当视图被连接到一个窗口时调用
onDetachedFromWindow():
当视图从窗口分离时调用
onWindowVisibilityChanged(int):
当View的窗口的可见性发生改变时调用
Constructors: (构造方法)
通常在这里处理:根据obtainStyledAttributes获取xml的属性
执行先后顺序:
onCreate()(setContentView()) -> onFinishInflate() -> onLayout()
在view的位置信息发生变化以及添加删除view时,会触发这几个回调:
removeView(): 子onMeasure --> 父onMeasure -->子onLayout-->父onLayout
addView():子onMeasure --> 父onMeasure -->子onLayout-->父onLayout
onDraw()调用:
在View初化完成之后开始调用;
invaildate()的时候会也被调用;
Visibility
1.可见
XML文件:android:visibility="visible"
Java代码:view.setVisibility(View.VISIBLE);
2.不可见
XML文件:android:visibility="invisible"
Java代码:view.setVisibility(View.INVISIBLE);
3.隐藏
XML文件:android:visibility="gone"
Java代码:view.setVisibility(View.GONE);
INVISIBLE和GONE的区别
INVISIBLE--->不可见,但这个View在ViewGroupt中仍保留它的位置,不重新layout
GONE---->不可见,但这个View在ViewGroup中不保留位置,重新layout,那后面的view就会取代他的位置。
child设置为gone会触发onMeasure,但是invisible不会触发onMeasure。一旦执行过onMeasure,往往就会执行onLayout来重新布局
参考:
https://blog.csdn.net/harvic880925/article/details/47029169