Activity加载View调用顺序
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调用顺序相关推荐
- android主动显示流程,Activity加载显示基本流程
本文章是基于Android源码6.0讲解Activity加载显示基本流程 首先上一张图给大家一个直观的了解 首先一个布局页面的加载是在Activity中的setContentView(R.layout ...
- 【Android优化篇】提升Activity加载速度的方法
文章转自:http://www.jianshu.com/p/2007ca0290d3 作者: CoderFan 前言 这个也是我面试遇到的问题,当时只回答了一种情况,异步加载数据,没想到别的方式,回来 ...
- java中类的加载及执行顺序
为什么80%的码农都做不了架构师?>>> 类的加载顺序 什么时候类加载 第一次需要使用类信息时加载. 类加载的原则:延迟加载,能不加载就不加载. 触发类加载的几种情况: ...
- Android 最简单仿IOS菊花加载样式,自定义Loading加载View
自定义菊花旋转加载view,可自定义半径大小,旋转view个数.颜色等,具体代码如下,可直接使用 public class LoadingView extends View {private Rect ...
- 今天仔细学习了html加载执行的顺序
页面上通常会有三个标签,html,head,body,这三个之间的关系是,html包含整个页面代码,head主要用于引入一些js,css文件,body用来包含页面代码和js代码 浏览器加载页面的顺序为 ...
- tomcat的class加载的优先顺序
来源:https://bbs.csdn.net/topics/80459833 Tomcat的class加载的优先顺序一览 最先是$JAVA_HOME/jre/lib/ext/下的jar文件. 环境变 ...
- 页面的加载与渲染顺序
页面的加载与渲染顺序: 1.一个页面的加载顺序是从上到下顺序加载的,并且加载与渲染同时进行. 2.引用外部js文件时,当在加载过程中遇到标签时,浏览器会向服务器发送一个reques并等待该reques ...
- 【java】ClassLoader.getResources加载资源的顺序
目录 前言 代码说明 目录结构 FromMultiJar/pom.xml 代码 编译后目录结构 启动命令 ClassLoader.getResources加载资源的顺序 先在本应用(FromMulti ...
- java jvm 加载类的顺序_java JVM-类加载静态初始化块调用顺序
测试类加载的全过程 public class Have { static { System.out.println("加载Have");//先加载Have再调用main方法 } p ...
最新文章
- WordPress标签
- JAVA并发-为现有的线程安全类添加原子方法
- redis中的事务、lua脚本和管道的使用场景
- OpenCV图像修补
- python绘图设置标题出现乱码_解决python2 绘图title,xlabel,ylabel出现中文乱码的问题...
- tcpdump查看某个端口数据
- 03-30 兼容性测试
- Bailian4068 判断是否可以构成等差数列【字符串流+排序】
- 3种方法实现Android按钮的点击事件,建议收藏!
- linux远程登录失败锁定,登录失败锁定策略配置登录超时策略禁用root远程登录脚本...
- 洛谷 P2294 [HNOI2005]狡猾的商人
- gcIntermediate_航线图_必知必会
- href 和 src 区别
- 【优化算法】多目标水母搜索优化算法 (MOJS) 【含Matlab源码 248期】
- 安装maya过程记录
- 游戏开发 打造基于Excel表格数据驱动系统
- Android App混合开发
- vnc支持用计算机民远程吗,VNC远程控制软件是什么?有没有更好的远程桌面控制解决方案?...
- 3.1 电磁干扰EMI
- js实现——鼠标单击事件-onclick和双击事件-ondblclick
热门文章
- 基于Angularjs实现分页
- centos利用tar包安装phpmyadmin
- 计算机网络第1章(概述)
- 433M射频遥控灯、震动感应灯、WIFI避障小车
- windows2003 apache php mysql_Windows 2003搭建Apache PHP MySQL环境经验分享
- 等压线上怎么画风向_战场上骑兵应该怎么拔刀?从清人佩刀为何总是刀柄向后说起...
- 什么是mysql事物定义_Mysql事务原理
- html中写随机数,为HTML生成一个随机数
- mysql 查询时间转换_数据库查询时日期的转换
- 前端: 42 种前端常用布局方案,值得收藏!