Android View System概论
2016-04-17 13:33
417 查看
Android View可能是Android中最复杂的部分
确定各个UI的位置
内容发生变化时重绘
接收事件、分配事件
处理来自wms的很多和窗口状态有关的回调
WindowManager继承自ViewManager,实际上是一个接口。可以看做是WMS的代理类。
负责保存Display 和 Window
保存进程内的所有view。
具体的工作还是交给了RootViewImpl完成。
此方法的主要步骤划分:
1. 预测量
2. 布局窗口
3. 最终测量
4. 布局控件树
5. 绘制
Android View System 的职责
测量各个UI元素的尺寸确定各个UI的位置
内容发生变化时重绘
接收事件、分配事件
处理来自wms的很多和窗口状态有关的回调
脱离了Activity的View
日常中View和Activity脱不离关系(Activity.setContentView)。先看一个另类的方法://在一个Service中调用 final WindowManager wm= (WindowManager)getSystemService(Context.WINDOW_SERVICE); final Button btn = new Button(getBaseContext()); btn.setText("click me!"); WindowManager.LayoutParams params = new WindowManager.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); params.gravity = Gravity.CENTER; params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; params.type = WindowManager.LayoutParams.TYPE_PHONE; wm.addView(btn,params);
WindowManager继承自ViewManager,实际上是一个接口。可以看做是WMS的代理类。
View的组成部分(Framework层)
其实,控件系统实际可以看做是View的一系列子类和WindowManager两个部分。WindowsManagerImpl
实际上也是一个代理类,工作交给了WindowManagerGlobal,负责保存Display 和 Window
WindowManagerGlobal
单例模式保存进程内的所有view。
具体的工作还是交给了RootViewImpl完成。
ViewRootImpl
View系统中最重要的一环控件系统的心跳
performTravesal()
此方法的主要步骤划分:
1. 预测量
2. 布局窗口
3. 最终测量
4. 布局控件树
5. 绘制
相关文章推荐
- Android问题集锦(1)
- Android笔记之属性动画
- Android Studio 编译失败 Could not read entry ':app:processDebugManifest' from cache taskArtifacts.bin
- android自定义view-打造圆形ImageView(四)终结篇
- Android音乐播放器(一):搜索手机存储的音乐
- (原创)开发使用Android studio所遇到的一些问题总结
- 拍摄照片和视频
- Android 用户登录界面
- 【Android学习】View点击事件分发机制(二)
- android中关于listView复用时出现错乱问题
- Android组件-下拉列表、时间选择器、日期选择器、单选框、复选框
- android应用中去掉标题栏的方法
- android线程之多线程
- Android ZXing 二维码、条形码扫描介绍
- listView学习记录
- Android,iOS打开手机QQ与指定用户聊天
- android游戏开发基础
- Android SO逆向-全局变量和静态局部变量
- 浅析Android手机卫士之手机实现短信指令获取位置
- Android学习之Android studio TraceView和lint工具的使用详解