标注:原文出自 逆流的鱼yuiop,根据自己的理解重新写了一份


一、  view和activity的区别

Android的四大组件之一activity是四大组件中唯一一个用来和用户进行交互的组件。可以说activity是Android的视图层。

再细化,activity相当于视图层中的控制层,是用来控制和管理view的,真正用来处理事件的实际上是view。

每个activity内部都有一个window对象,Window对象包含了一个DecorView(实际上是FrameLayout),我们通过serContentView给activity设置显示的view,实际上都是加到了DecorView中。

二、 view有哪些?

Android 提供了种类丰富的view来用对各种需求,例如:提供文字的TextView,提供点击事件的Button,提供显示图片的ImageView,还有各种布局文件,例如:Relativilayout,Linerlayout等,都是继承自View。

三、  ViewGroup是什么?

ViewGroup继承自view,实现了两个接口àViewParentViewManger

ViewManger提供了三个方法,addView(添加),removeView(删除)和UpdateViewLayout(更新)布局。

ViewParent提供了一系列操作子View的方法,例如焦点的切换,显示区域的控制等等。

四、  为什么Google产生viewGroup?

View很多事都能做,包括显示复杂的界面,只需要设计一个复杂的view即可。例如短信通知的icon,一个可以显示文字也可以显示图片的view,用draw方法可以轻松达到这个效果,但是这样复杂,重用性差,所以,我们可以组合ImageView和TextVIew一起用,此时,需要一个容器ViewGroup来装这两个view。

ViewGroup和View最大的不同是可以组合多个view,多个view组合在一起如何摆放就是VIewGroup需要解决的问题。

五、 View的层级结构是什么?

我们平时看到的界面都是一个ViewGroup作为根View,通过往viewGroup中添加子View(可以是view,也可以是viewGroup),来组合出各具特色的界面。

这种从根到叶的组合方式,我们可以看成一个view树,(类似于XML),view的显示和事件处理都依赖于这个View树。

绘制和事件处理的起始点,都是从根view开始一级一级的往下传递。我们从任意一层发起绘制,都将反馈到根view,然后从上往下传递。之前我们说过根view就是Window中的DecorView,也就是一FrameLayout。

六、View的onMeasure()/onLayout/onDraw()方法做了什么?

(1) Measure侧量一个View的大小

(2) Layout摆放一个View的位置

(3)  Draw画出一个View的显示内容

其中Measure和Layout方法都是final的,无法重写,虽然draw不是final的,但是也不建议重写该方法。这三个方法都已经写好了view的逻辑,如果想实现自身的逻辑,而又不破坏view的工作流程,可以 重写 onMeasure() onLayout() onDRaw()方法。

更多相关文章

  1. Android(安卓)生成竖直方向的条形码
  2. 【Android(安卓)源码解析】浅谈DecorView与ViewRootImpl
  3. android 事件模型原理
  4. Android异步加载之AsyncTask
  5. Android中库项目、jar包等的使用方法
  6. Android多用户原理和实现
  7. Mosby -- Android上的MVP框架
  8. Android的两种事件处理机制
  9. View的工作原理

随机推荐

  1. 问答-服务器集群负载均衡原理?
  2. 单点登录最简单的方法
  3. MongoDB Go Driver使用帮助文档
  4. vmware如何将主机硬盘挂载到虚拟机
  5. MongoDB 排序内存超过 32M 限制
  6. Ubuntu中安装vmware tools工具
  7. MongoDB基础命令及操作 (仅学习)
  8. Oralce数据库设计规范V3
  9. 2.4.18预读算法详解
  10. 微服务架构 vs. SOA架构