https://www.gravatar.com/avatar/7a0c24f697ea1587001c36d00039b60f?s=240&d=mp

Google公布Android L预览版本源代码

不久前的Google I/O大会上刚刚推出的Android L,据称是Google历史上最深入的版本更新。如今最新版Android L的源代码已经公布了。

源码下载地址:https://android.googlesource.com/?format=HTML

此次公布源码的是Android L预览版本。源代码中,Google保留了不少重要内容,包括二进制软件包和内核代码,看来Android L仍在调试中。估计还要再过一段时间才能推送正式版系统。

http://cms.csdnimg.cn/article/201407/03/53b4be17c1663.jpg

我们来回顾一下Android L的几个新特性:

  • 全新的Material Design设计语言。
  • 更便捷和清晰的下拉通知栏
  • 用滑动来取代之前的点击
  • ART作为默认选项
  • 加强了设备的电池续航,新增了一个省电模式
  • 加强了内存管理机制,完全兼容64位系统
  • 通过Play商店推送Android系统的升级补丁
  • 加入了类似Find My iPhone的功能,支持远程擦除手机数据
  • 多任务或者多页卡切换变为立体的层叠页卡
  • 新的锁屏方式

支持Android L的设备包括:

[转]Android的onMeasure和onLayout And MeasureSpec揭秘

Android中自定义ViewGroup最重要的就是onMeasure和onLayout方法,都需要重写这两个方法,ViewGroup绘制 的过程是这样的:

onMeasure → onLayout → DispatchDraw

其实我觉得官方文档解释有大大的问题,刚开始一直很疑惑onMeasure和onLayout是什么意思,看了很多资料后豁然开朗,总结如下

首先要知道ViewGroup是继承View的,后面的解释跟View有关。ViewGourp可以包含很多个View,View就是它的孩子,比如LinearLayout布局是一个ViewGroup,在布局内可以放TextEdit、ImageView等等常用的控件,这些叫子View,当然不限于这个固定的控件。

onMeasure → onLayout → DispatchDraw:onMeasure负责测量这个ViewGroup和子View的大小,onLayout负责设置子View的布局,DispatchDraw就是真正画上去了。

onMeasure

官方解释:

protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)

Measure the view and its content to determine the measured width and the measured height. 即 测量View和它的内容决定宽度和高度。

说实在的,官方文档说测量我刚开始很疑惑,onMeasure翻译过来是测量,根本不知道它的意图,其实它有两方面作用:①获得ViewGroup和子View的宽和高 ②设置子ViewGroup的宽和高,注意,只是宽和高。其实,追踪onMeasure方法会发现,它继承自View。
典型的onMeasure的一个实现

@Override  
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  

    int width = MeasureSpec.getSize(widthMeasureSpec);   //获取ViewGroup宽度  
    int height = MeasureSpec.getSize(heightMeasureSpec);  //获取ViewGroup高度  
    setMeasuredDimension(width, height);    //设置ViewGroup的宽高  

    int childCount = getChildCount();   //获得子View的个数,下面遍历这些子View设置宽高  
    for (int i = 0; i < childCount; i++) {  
        View child = getChildAt(i);  
            child.measure(viewWidth, viewHeight);  //设置子View宽高  
        }  
 }

很明显,先获取到了宽高再设置。顺序是先设置ViewGroup的,再设置子View。
其中,设置ViewGroup宽高的方法是 setMeasureDimension(),查看这个方法的源代码,它在view.class下