Android 控件架构

 如果说Android上的app是一个有血有肉的人的话,那么人靠衣装马靠鞍,那么控件就是把app装扮的漂漂亮亮的“衣服”。那么安卓的控件到底是如何架构,又是如何渲染的了。

  无论是什么控件,在Android中控件只有两种,一种就是View,另一种是ViewGroup。ViewGroup控件组,一个控件的百宝箱,可以包含各种各样的控件组,它不仅能够包含控件还能够管理着控件。通过ViewGroup,整个控件就至上而下的形成了树形结构,即我们通常所说的控件树;父控件负责相应子控件的绘制与测量,并向其传递交互事件。安卓系统怎么准确无误的找到每一个控件?只需要调用findViewbyid的方法就能够按照深度优先的方法找到每一个控件了。在每个控件树最顶端,都站立了一个Viewparent对象,这个对象也是这颗控件树的核心,所有的交互管理事件都是由这个大大负责统一分配和调度,从而起这一个整体宏观调控的效果。一个控件树架构如图所示:

  做过Android开发都知道,要使一个activity显示相应的布局文件,都必须要setContentView。我们要看一下setContentView背后到底发生了什么,Android又是如何将其渲染出来的了。要解答这些问题,我们还是要了解Android的界面架构图。具体的架构图如图所示:

  通过上图所示,我们可以得出这样的结论。

  ①每个activity都有一个window对象。

  ②而每一个window对象通常是由PhoneWindow来实现。

  ③每个PhoneWindow对象包含DecorView这个根视图对象,将其视图展示都是通过这个对象显示到PhoneWindow上。

  ④而DecorView被一分为二,一个是TitleView,一个ContentView,TitleView显示相应的标题,ContentView显示具体布局,这些应该大家很熟悉。

  这样架构也可以建立一个上文提到的视图树,这颗视图树长成这个样子:

 

  这样控件树,能够帮我们解答这样一个问题为什么requestWindowFeature()一定要在setContentView之前调用才能起效。这是由于TitleBar下面才是ContentView,在ContentView之后设置,这时,只能有ContentView。当程序在oncreate方法调用setcontentView后会调用onResume方法,此时系统会把整个DecorView添加到PhoneWindow中,最终将视图显示出来。

时间: 2024-10-14 09:48:17

Android 控件架构的相关文章

Android群英传笔记——第三章:Android控件架构与自定义控件讲解

Android群英传笔记--第三章:Android控件架构与自定义控件讲解 真的很久没有更新博客了,三四天了吧,搬家干嘛的,心累,事件又很紧,抽时间把第三章大致的看完了,当然,我还是有一点View的基础的,可以先看下我之前写的几篇基础的View博客 Android绘图机制(一)--自定义View的基础属性和方法 Android绘图机制(二)--自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解 Android绘图机制(三)--自定义View的三种实现方式以及实战

Android视图控件架构分析之View、ViewGroup_Android

在Android中,视图控件大致被分为两类,即ViewGroup和View,ViewGroup控件作为父控件,包含并管理着子View,通过ViewGroup和View便形成了控件树,各个ViewGoup对象和View对象就是控件树中的节点.在控件树中,以树的深度来遍历查找对应的控件元素,同时,上层控件负责子控件的测量与绘制,并传递交互事件. Android控件树: AndroidUI界面架构图: 一.测量View的工具类:MeasureSpec 1.MeasureSpec包含了测量的模式和测量的

Android视图控件架构分析之View、ViewGroup

在Android中,视图控件大致被分为两类,即ViewGroup和View,ViewGroup控件作为父控件,包含并管理着子View,通过ViewGroup和View便形成了控件树,各个ViewGoup对象和View对象就是控件树中的节点.在控件树中,以树的深度来遍历查找对应的控件元素,同时,上层控件负责子控件的测量与绘制,并传递交互事件. Android控件树: AndroidUI界面架构图: 一.测量View的工具类:MeasureSpec 1.MeasureSpec包含了测量的模式和测量的

图片-android控件自定义属性为什么引用报错呢

问题描述 android控件自定义属性为什么引用报错呢 解决方案 改成xmlns:tvtext=""http://schemas.android.com/apk/res-auto"",如果这样也不行,那就是attrs那里定义有问题 解决方案二: http://blog.csdn.net/lmj623565791/article/details/45022631 解决方案三: 检查attrs写了没 解决方案四: Android 自定义控件与属性Android自定义控件

android控件点击变背景

问题描述 android控件点击变背景 怎么在点击一个控件后改变背景呢?我说的是在不点击其他控件的时候保持背景的改变,不是点击的瞬间改变,再强调一句:不是点击的瞬间改变 解决方案 Android控件背景点击改变 解决方案二: 如果没理解错你的意思的话, 事件监听+延迟 解决方案三: 监听click事件,然后调用postDelayed 解决方案四: 用选择器selector呀,设置一下就行了 解决方案五: 开启线程延迟执行切换背景 解决方案六: 表达不清楚~~~~~

设计-Android控件如何根据屏幕大小自适应?

问题描述 Android控件如何根据屏幕大小自适应? 我想设计出这种登陆界面,后面的牌牌是一个背景图片,但是在不同大小的屏幕下,几个EditText控件不能正好在牌字上.该如何使这几个控件始终在牌子上呢? 解决方案 建议初期就是用相对布局就很好了 也就是 RelativeLayout布局.可以自己调整位置在预览里面! 解决方案二: 使用相对布局,RelativeLayout布局 解决方案三: http://yixiong89921.blog.163.com/blog/static/1325377

android 控件-android:这个控件叫什么,怎么实现的呢?

问题描述 android:这个控件叫什么,怎么实现的呢? 50C 如题,哪位朋友会呢,帮忙下吧,谢谢了. 解决方案 Android控件倒计时的实现Android 实现控件浮动效果Android Studio中Spinner控件的数据绑定实现 解决方案二: 自定义的 自定义的 自定义的 解决方案三: http://www.javaapk.com/source/6640.html,这个是仿乐动力体重设计例子,拿过来改改是可以的 解决方案四: 能说的清楚一点吗?比如这个控件有什么效果 解决方案五: 应

【Android】关于Android控件EditText的属性InputType的一些经验

关于Android控件EditText的属性InputType的一些经验   来源:http://blog.163.com/inflexible_simple/blog/static/16769468420131014382424/ 1.InputType属性在代码中的设置必须放在setSingleLine()函数之后,否则无效: 2.关于InputType属性xml与代码的对应值如下: android java代码设置EditText输入格式参数对应Description列 setInputT

cocos2d-x-cocos怎么调用Android控件并反馈控件的输入信息

问题描述 cocos怎么调用Android控件并反馈控件的输入信息 我知道可以用JNI实现JAVA和C++之间的相互调用,但是如何把JAVA的数据再反馈给Cocos呢? 解决方案 参考:http://www.tuicool.com/articles/UbaEre