Android官方文档翻译--How Android Draws Views
来源:互联网 发布:程序员最讨厌的两件事 编辑:程序博客网 时间:2024/06/06 01:36
Android如何绘制视图
当一个activity接收到焦点的时候,它将会被要求绘制界面布局。Android的framework将会处理绘制的过程,但是activity必须提供布局层的根节点。
绘制是从布局层的根节点开始的。它要度量和绘制布局树。绘制是通过遍历整个布局树然后渲染那些交叉于无效区域的视图。反之,每一个view group负责请求它的孩子进行绘制并且每一个则view负责自身。由于树的遍历是有序的,这就意味着父亲将会比孩子先绘制,并同其它绘制过的兄妹在树中有序出现。
绘制布局有两个阶段的过程:一个测量的阶段和布局的阶段。测量阶段是靠实现measure(int, int)方法,并且会从上自下遍历整个view树。每一个view在递归过程中会将尺寸往下拉动。在测量的最后阶段,每一个视图都都存储了自身的度量值。第二个阶段发生在layout(int, int, int, int) 并且也是从上自下的。在这个阶段没一个父亲负责使用在度量阶段计算的尺寸来定位它的孩子。
当每一个视图的measure()方法返回的时候,同那些所有的视图后代一起,它的getMeasuredWidth() , getMeasuredHeight()的值必须被设置。View的可度量的宽和高必须要遵照view的父亲所给的限制。这保证了在度量的最胡阶段,所有的父亲接受它们的孩子的度量值。一个父亲view可以在它的孩子上多次调用measure()方法,例如,父亲可以用不明确的尺寸发现他们到底需要多大来度量每一个孩子,然后再次调用measure()方法,当孩子的没受限制的尺寸的总和太大或是太小,就会使用实际的数据 。
度量阶段使用两个类来和尺寸交互。View.MeasureSpec类被view用来告诉它们的父亲他们想被如何度量和摆放。LayoutParsms 类只是描述view需要多宽和多高。对于每一个尺寸,可以指定为下面的之一:
- 一个确切的数字
- FILL_PARENT, 这意味着视图想要和它的父亲一样大
- WRAP_CONTENT, view只想包裹住自己的内容
LayoutParams的子类对应不同的ViewGroup的子类。例如,相对布局有它自己的LayoutParams的子类,包含了可以让子视图在中央水平和垂直布局的能力。
MeasureSpecs被用来将需求从树的父亲到孩子往下推进。MeasureSpecs只能是下面树模式中的一种: - UNSPECIFIED: 这被父亲用来决定需要哪个尺寸的子视图。例如,一个线性布局可以在它的孩子上调用measure()方法,并将高度设置为UNSPECIFIED,宽度为EXACTLY 240来发现子视图需要被给的240像素的高度有多高。
- EXACTLY: 被父view用来给子view强加一个精确的大小。子view必须是这个大小,并确保它的后代都在这个大小范围之内。
- AT_MOST: 被父view用来强加一个最大的大小给子view。子view必须是这个大小,并确保它的后代都在这个大小范围之内。
- Android官方文档翻译--How Android Draws Views
- Android官方文档翻译--How Android Draws Views
- (翻译)API-How Android Draws Views
- How android draws views
- How Android Draws Views
- How Android Draws Views
- How Android Draws Views
- How Android Draws Views
- How Android Draws Views
- 【Android】How Android Draws Views
- 【Android文档】Android界面绘制流程--------How Android Draws Views
- Android Developer : How Android Draws Views
- View 绘制机制 -- How Android Draws Views
- How Android Draws Views(Android 视图绘制机制)
- How Android Draws Views,Android如何绘制View,
- How Android Draws Views 安卓如何绘制view
- 安卓如何绘制视图-How Android Draws Views
- Android 用户界面---Android如何描画View(How Android Draws Views)
- python 利用smtplib发送邮件
- Jquery操作服务器控件 text和val
- 【个人整理】WebService核心文件server-config.wsdd解析
- hdu1003
- android学习笔记7--------MVC设计模式
- Android官方文档翻译--How Android Draws Views
- DAO(update)
- map的showsUserLocation和mkAnnotation混合使用注意事项,防止crash
- WINCE获取程序所在路径
- 在Windows Server 2008 R2(64位)上安装SharePoint 2007出现的一个错误的解决方法
- 多图详解 Java EE 6的EJB模型案例
- java.util.concurrent.ConcurrentHashMap
- DAO(delete)
- 浮躁