2019独角兽企业重金招聘Python工程师标准>>>

在Activity的onCreate方法中,可以通过setContentView()方法来设置此Activity要显示的界面。在xml中的布局文件需要先解析成View树才能加载显示,通过View的onMeasure,onLayout,onDraw方法完成View的测量大小,布局以及View自身的绘制。在此想说一下Activity生命周期的onCreate,onStart,onResume方法和View自身的测量,布局等方法的调用顺序问题。

先重写Activity的这几个方法并打印log

public class FlowActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Log.e("onCreate", "onCreate");setContentView(R.layout.flow);}@Overrideprotected void onResume() {Log.e("onResume", "onResume");super.onResume();}@Overrideprotected void onStart() {Log.e("onStart", "onStart");super.onStart();}
}

在重写ViewGroup方法FlowLayout

public class FlowLayout extends ViewGroup {public FlowLayout(Context context) {super(context);}public FlowLayout(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// TODO Auto-generated constructor stub}public FlowLayout(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {Log.e("onMeasure", "onMeasure");setMeasuredDimension(totalWidth, resolveSize(totalHeight, heightMeasureSpec));}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {Log.e("onSizeChanged", "onSizeChanged");super.onSizeChanged(w, h, oldw, oldh);}@Overrideprotected void onLayout(boolean changed, int l, int t, int r, int b) {Log.e("onLayout", "onLayout");}@Overrideprotected void onFinishInflate() {Log.e("onFinishInflate", "onFinishInflate");super.onFinishInflate();}
}

打印Log可以看出Activity生命周期的函数和View的测量,布局等函数的调用顺序。

因此,我们通常在onCreate方法里面是获取不到某个View测量的宽高值,获取的值为0.

只有当Activity的onResume方法调用完毕之后,当前的窗口将要显示可见,才会去测量,绘制View树。setContentView方法只是把xml文件解析为View树的过程,并没有发起绘制View树。当解析完毕之后会调用OnFinishInflate方法,完成解析。

当View的“大小”发生改变的时候会调用onSizeChanged方法,这个大小,个人理解为布局大小,并非测量大小。是在onMeasure之后,onLayout之前调用的方法。

理解了这些调用顺序,我们可以知道在何时去获取或设置一些值。

转载于:https://my.oschina.net/u/1254864/blog/213233

Activity加载View调用顺序相关推荐

  1. android主动显示流程,Activity加载显示基本流程

    本文章是基于Android源码6.0讲解Activity加载显示基本流程 首先上一张图给大家一个直观的了解 首先一个布局页面的加载是在Activity中的setContentView(R.layout ...

  2. 【Android优化篇】提升Activity加载速度的方法

    文章转自:http://www.jianshu.com/p/2007ca0290d3 作者: CoderFan 前言 这个也是我面试遇到的问题,当时只回答了一种情况,异步加载数据,没想到别的方式,回来 ...

  3. java中类的加载及执行顺序

    为什么80%的码农都做不了架构师?>>>    类的加载顺序  什么时候类加载  第一次需要使用类信息时加载.  类加载的原则:延迟加载,能不加载就不加载. 触发类加载的几种情况:  ...

  4. Android 最简单仿IOS菊花加载样式,自定义Loading加载View

    自定义菊花旋转加载view,可自定义半径大小,旋转view个数.颜色等,具体代码如下,可直接使用 public class LoadingView extends View {private Rect ...

  5. 今天仔细学习了html加载执行的顺序

    页面上通常会有三个标签,html,head,body,这三个之间的关系是,html包含整个页面代码,head主要用于引入一些js,css文件,body用来包含页面代码和js代码 浏览器加载页面的顺序为 ...

  6. tomcat的class加载的优先顺序

    来源:https://bbs.csdn.net/topics/80459833 Tomcat的class加载的优先顺序一览 最先是$JAVA_HOME/jre/lib/ext/下的jar文件. 环境变 ...

  7. 页面的加载与渲染顺序

    页面的加载与渲染顺序: 1.一个页面的加载顺序是从上到下顺序加载的,并且加载与渲染同时进行. 2.引用外部js文件时,当在加载过程中遇到标签时,浏览器会向服务器发送一个reques并等待该reques ...

  8. 【java】ClassLoader.getResources加载资源的顺序

    目录 前言 代码说明 目录结构 FromMultiJar/pom.xml 代码 编译后目录结构 启动命令 ClassLoader.getResources加载资源的顺序 先在本应用(FromMulti ...

  9. java jvm 加载类的顺序_java JVM-类加载静态初始化块调用顺序

    测试类加载的全过程 public class Have { static { System.out.println("加载Have");//先加载Have再调用main方法 } p ...

最新文章

  1. WordPress标签
  2. JAVA并发-为现有的线程安全类添加原子方法
  3. redis中的事务、lua脚本和管道的使用场景
  4. OpenCV图像修补
  5. python绘图设置标题出现乱码_解决python2 绘图title,xlabel,ylabel出现中文乱码的问题...
  6. tcpdump查看某个端口数据
  7. 03-30 兼容性测试
  8. Bailian4068 判断是否可以构成等差数列【字符串流+排序】
  9. 3种方法实现Android按钮的点击事件,建议收藏!
  10. linux远程登录失败锁定,登录失败锁定策略配置登录超时策略禁用root远程登录脚本...
  11. 洛谷 P2294 [HNOI2005]狡猾的商人
  12. gcIntermediate_航线图_必知必会
  13. href 和 src 区别
  14. 【优化算法】多目标水母搜索优化算法 (MOJS) 【含Matlab源码 248期】
  15. 安装maya过程记录
  16. 游戏开发 打造基于Excel表格数据驱动系统
  17. Android App混合开发
  18. vnc支持用计算机民远程吗,VNC远程控制软件是什么?有没有更好的远程桌面控制解决方案?...
  19. 3.1 电磁干扰EMI
  20. js实现——鼠标单击事件-onclick和双击事件-ondblclick

热门文章

  1. 基于Angularjs实现分页
  2. centos利用tar包安装phpmyadmin
  3. 计算机网络第1章(概述)
  4. 433M射频遥控灯、震动感应灯、WIFI避障小车
  5. windows2003 apache php mysql_Windows 2003搭建Apache PHP MySQL环境经验分享
  6. 等压线上怎么画风向_战场上骑兵应该怎么拔刀?从清人佩刀为何总是刀柄向后说起...
  7. 什么是mysql事物定义_Mysql事务原理
  8. html中写随机数,为HTML生成一个随机数
  9. mysql 查询时间转换_数据库查询时日期的转换
  10. 前端: 42 种前端常用布局方案,值得收藏!