activity界面学习
来源:互联网 发布:淘宝6.5.0版本下载 编辑:程序博客网 时间:2024/06/05 09:47
控件的大致分类 : ViewGroup控件 View控件
Activity 界面架构图 : Activity ->PhoneWindow->DecorView->TitleView ContentVie
每个Activity都包含一个Window对象 ,Window对象通常由 PhoneWindow实现
PhoneWindow对象把一个DecorView设置为整个应用窗口的根View,作为窗口界面的顶层视图,DecorView装载了一个LinearLayout,会根据相应了参数设置不同的布局,如果设置requestWindowFeature(Window.FEATURE_NO_TITLE)来设置全屏显示,视图树中就只剩Content了,requestWindowFeature()方法要在setContentView()方法之前
ContentView 是一个id为content的FrameLayout
程序在onCreate方法()中调用setContentView方法后ActivityMangerService会回调onMeasure()方法,此时系统才会把整个DecorView添加进PhoneWindow中,并让其显示出来,完成绘制
在onMeasure()方法中进行View的测量.
MeasureSpec类:是一个32位的int值,其中高2位为测量的模式,低30位为测量的大小,使用位运算符是为了提高并优化效率.
测量方式:
EXACTLY:精确值模式,设置width为具体的值的时候,系统使用的是EXACTLY模式
AT_MOST:最大值模式,当控件的width属性或height属性指定为wrap时,控件大小一般随着控件的子控件或内容的变化变化,此时控件的尺寸只要不超过父类的尺寸即可
UNSPECIFIED:不指定其大小测量模式,view想多大就多大,在绘制自定义View的时候使用
onMeasure()方法 最终会调用setMeasuredDimension(int measuredWidth,int measuredHeight)方法把测量后的宽高设置进去. 最后在onMeasure中用setMeasuredDimension(width,height)重新定义宽高 //super.onMeasure(width,height)也是调用的这个方法
自定义测量值例子:
int specMode=MeasureSpec.getMode(measureSpec);//int specSize=MeasureSpec.getSize(measureSpec);int result=0;if(specMode==MeasureSpec.EXACTLY){ result=specSize;//如果是指定的,直接指定测量值}else{ result=200;//需要指定一个默认值 if(specMode==MeasureSpec.AT_MOST){//如果是warpcontent result=Math.min(result,specSize);//需要从默认值和测量值中取出最小的 }}return result;
View的绘制,重写onDraw方法,在canvas上来绘制所需要的图形
创建一个canvas时,最好传一个bitmap进去,传进去的bitmap与通过这个bitmap创建的canvas画布联系一起,这个过程被称之为装载画布,这个bitmap用来存储所有绘制在canvas上的像素信息
- activity界面学习
- Android学习【Activity界面跳转】
- Activity界面
- Android学习之LayoutInflater动态载入activity界面
- 手机卫士学习16-Activity界面切换自定义动画
- android学习笔记---activity延迟跳转实现欢迎界面
- activity返回主界面
- Android Activity界面跳转
- Activity多界面跳转
- Activity跳转 两个界面
- Activity界面跳转
- Activity 主界面服务
- Activity界面刷新
- Activity界面刷新
- Activity(界面)
- android activity界面跳转
- Android Activity 界面
- Activity界面跳转动画
- Tomcat 优化方案(转)
- 进程/线程同步的方式和机制,进程间通信
- Cnki数据集包装清洗
- 1564: [NOI2009]二叉查找树 区间DP
- 浏览器禁止 后退键
- activity界面学习
- MPU6050 实时图表上位机 C#
- 设计模式-6大设计原则
- adb命令
- 算法训练 最大体积
- navicat 1045 access denied for user
- dispatch_async 和dispatch_sync GCD
- Android开发艺术探索--Activity、Context
- matlab编程