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

posted on 2020-04-27 20:26  JJ_S  阅读(855)  评论(0编辑  收藏  举报