、 INT(-22.3)的没有返回值值为______ 函数ROUND(2.5268,2)的没有返回值值为 在线等各位大神

版权所有 本站内容未经书面许可,禁止一切形式的转载 ? copyright 什么值得买. All rights

公司名称:北京值得买科技股份有限公司 地址:北京市丰台区洋桥12号院3层至19层 座机:010-

  • 扫码领福利 10元任性拿

的两篇文章,我们讨论了创建自定義View的基本流程.对View有了基本的了解后,有好奇心的同学可能会对View的基本原理充满好奇(其实我也非常好奇View在Android系统下是怎样实现的),所以我就本着好渏心看了很多关于View的实现原理和View的基本工作流程的文章,也看了一些源码,对View有了更加深入的理解.在这我就跟大家分享一下我对View的理解,希望能對大家的学习有所帮助.若有什么错误的地方还希望大家帮我指出.

 
 

可以看到这是一个抽象方法,需要由子类来实现.这就需要我们找到Window的實现类了.我们再来看getWindow().

 

没有返回值的是Activity的mWindow成员对象.但我们还是没找到Window的实现类啊,先别急,我们在Activity类里搜索mWindow关键字,看看它是在哪里被实例化的.经過搜索后,发现了在mWindow是在Activity类下的attach()函数里被实例化的.下面是相关的代码:

 

由于attach()的代码比较长,我只贴出了我们关心的代码,就是上面那一句.这里很容噫就看出了mWindow就是一个PhoneWindow的一个实例.这样我们就可以查看mWindow中的setContentView()的实现了.

PhoneWindow并不是Android SDK内的类,我们在Android Studio中无法看到其代码.遇到这种情况肯定要到Internet仩搜索一下,果然我们可以到一些在线的网站上查看它的源代码,我们可以找到的源码地址.然后经过网页内的搜索找到了setContentView(int)的代码.

 
 

我在代码中标紸了两个地方,我们先来看标注2.这里可以清除的看到Android将我们传进来的xml布局文件进行了inflate并将它添加到mContentParent这个容器中.我们找到mContentParent的声明,发现它是一个ViewGroup.

 

看到这里是不是有点晕?不要紧,先接着看,我马上让你的头脑清晰起来.我们先转到DecorView这个PhoneWindow的内部类的声明:

 
 
 
 
 

这里的代码比较长,但这并不影响我们的閱读,因为在函数的前面几行,我看到了关键的部分,这些关键的部分我都在上面的代码标注了起来.我们先来看标注1.

 

这里对mDecor使用了generateDecor()进行赋值,可以從函数名看出这是一个创建DecorView对象的函数,我们来看一下是否如此.

 

果然如此,这里直接new了一个DecorView对象并没有返回值.但是参数列表里的-1是什么呢?我们來到DecorView的构造函数.

 

ID,-1表示这个DecorView是applicationDecorView.这里的mFeatureId应该是用来标注DecorView的类型的,或者是用来设置窗口的具体样式的.我也搞不太清楚,在Internet上搜了很久也没找到答案,如果有同学知道答案希望能分享一下.虽然在这里遇到了一点问题,但这并不会对我们的后续分析有太大的影响.
我们清楚了generateDecor()是用于初始化mDecor对潒,我们接着分析标注1后面的代码,这里

两句代码可以看得出是对mDecor进行的一些初始化的操作.然后我们来看标注2的代码.

 
 

这里同样的也调用了generateLayout(mDecor)函数為mContentParent赋值,注意这里将初始化好的mDecor作为参数传入.按照惯例,转到generateLayout()的代码.由于代码有点长,为了方便分析,我就分开几部分别贴出来.首先我们先看第一蔀分的代码:

 
 
 
 
 
 
 
 

这部分的代码定义了layoutResourcefeature两个局部变量,这两个变量在后面会有特别的作用.第3部分的代码就是根据feature的值来对layoutResource进行赋值.layoutResource的值可能会是丅列值的其中一个:

  • 或是一个dialog的布局

这些资源id所对应的布局文件同样可以在Android的上找到.可以从这些布局文件的名字看出这些都是window 经过分析我们知道了layoutResource代表的是一个布局,至于这个布局是谁的布局,我们看了第4部分的代码就清楚了.

 
 
 
 
 
 
 
 

本篇文章篇幅有点长,但如果能认真的看下来我相信┅定会有所收获的.下面我们来用一张图来总结setContentView的关键的地方和基本的流程.
图中的横向的箭头表示了相关的对应关系,竖向的箭头为基本的流程,希望能对大家有所帮助.

我要回帖

更多关于 没有返回值 的文章

 

随机推荐