本文是转载的,原创 在此http://blog.csdn.net/nieweilin/article/details/5997247
看到csdn博客上面其它大牛的系列性android博客,小弟确实十分羡慕。所以经过一番思想斗争后,小弟终于要打算写写系列性的博客了。通过对一些选题的推敲,我决定对android的sdk文档进行一个比较彻底的研读,并通过博文的形式和大家分享分享,交流交流。哈哈,现在想起来就热血沸腾啊!
这就是第一次尝试啦。这篇文章主要介绍了android sdk文档的结构和使用方法以及pakage index里面的android这一条的相关知识。
好啦,废话少说,开动!
一、楔子:关于android sdk文档
第一,什么是android sdk文档?
这个问题太白痴了:看到这里,你肯定会在心里这么想。但且慢,这个问题我觉得还是值得谈谈的,理由嘛,看了下面的你就不点自明了。android sdk的全名是android software develop kit,也就是android程序开发工具组。这也就是说,它本质上也就是一个供大家使用的工具而已--和锤子、扳手一样(怪不得代表android开发的logo会是小机器人腰里别着一个扳手和一个锤子 )。既然是一个工具,而且是由谷哥大大最近几年才猛顶起来的一个新型工具,那么如果想让我们这些对它感兴趣的人能够把它使用自如的话,就必然得有一份详尽的说明书来阐述它在哪里用、怎么用以及如何才是在最好的用。android sdk文档则起到了这个作用:它包含了该工具的几乎各种情况下使用的组件(也就是android sdk中包含的各种类)的介绍--UI构建时、Gps模块调用时、数据库操作时、硬件调用时等等;它让你能够知道各种工具组件该怎么使用--各种类所包含的方法、字段介绍几乎都已涵盖,基本上有一定基础的同学看过即知如何使用该类;它可以使你知道怎样才是在最好的使用该工具--哪些方法已经过期它会告诉你,一些类的特殊属性它会教你怎么最好地使用(例如android.app.Service类的 startForeground (int id, Notification notification) 方法处它就教会了我用java反射机制来调用父类无法继承给子类的final方法)。到了这里,我们可以这么描述android sdk文档了:一份android sdk的使用说明书。
第二,哪里可以看到sdk文档?
看sdk文档有两个途径,在线网页浏览和离线文档浏览。
在线的地址是:developer.android.com(被河蟹掉了,表示极为不解,可以去这里,感谢FaxLJ的提醒)
离线查看无需你再去单独下载文档包,因为如果你当初下载android sdk时选择完整下载了,文档就被一并下载到本地了。一般andorid sdk的根目录里的docs文件夹就是文档所在地,里面有一个index.html,打开它就可以看到sdk文档的homepage。
个人推荐离线查看,虽然可能不是最新版本的文档,但总比翻墙被龟速折磨来的好些╮(╯▽╰)╭。
第三、文档重要性。
以前我刚开始学java的时候曾经做过一件很脑残的事情:看到System.out.println("Hello World!");这一句代码时我就想知道System是一个什么样的东西,于是就去网上搜索--可是花了很多时间,也看了一些文章,但就还是无法对System有一个系统性的了解--还是到后来了解到java文档,把java文档下载下来(java文档在sdk里默认是不包含的)后去看了才把它了解透--What a shame!好了,不用我说你也就应该了解到了sdk文档的重要性:文档是官方提供的,所以具有无以伦比的权威性;文档是起说明式作用的,所以你想要知道什么,"骡迹"上是都会给你提供的;因为文档是很重要的,所以文档是很重要的。我建议大家要养成一个习惯,以后遇到疑问时,首先应该想到去sdk文档上查找,然后再去百度上google:这样做一来可以锻炼自己理解E文的能力,二来也会让自己的印象更深刻些。
第四、关于文档的好东东推荐
二、开端和升华:android sdk文档基本知识介绍
要想能够快速的、有技巧的使用android sdk文档,首先就要了解这个东东。所以接下来我会和大家侃侃android sdk文档的结构、内容等各方面的基本知识。
1.android sdk文档结构
1号区域:标签栏,各个标签代表了文档所包含的不同种类的帮助。
Home:欢迎界面
SDK:对各版本SDK的概述、对开发环境的搭建的指导等等一些开发准备知识
Dev Guide:对开发本身进行了比较初级的指导,一些比较实用给力的例子都在这里了
Reference:类似于Java api文档的android api文档,以后我们会常光顾的地方(上图就是Reference的首页)
Resources Video 和 Blog:对开发者的一些其他支持资源,我们的网络环境下估计是很难享受到的
以后我会主要去探索Reference这个含金量比较多的版块,另外有需要的话会穿插看看Dev Guide。
2号区域:Reference中的包列表
关于各包的简介看这里。
3号区域:Reference主要内容浏览区域
4号区域:搜索框,主要用于搜索某个类后接口以快速浏览该类的Reference(好用,极力推荐!)
利用文档自带的搜索框的自动补全功能,你可以以神速搜索到你想要查询的类。例如我要搜索LayoutParams,就只需输入Layo四个字母就可以出现这个类,然后点击该类就直接进入了LayoutParams的文档。
5号区域:用于根据android apiLevel(android中对各个版本的api作了一个序号对应,从而易于分辨。例如2.2版本对应8)过滤类和接口以及相关方法,也很实用
6号区域:某包内各类以及接口的展示区域
2.文档内容
在这里就说说Reference的主要内容吧。
对于一个类,Reference相关于它会罗列出如下的几部分相关内容:
(1)重要属性概述。该类的“前缀”——public、private、abstract等;该类的“亲戚”关系——继承于谁、实现了哪些接口、有哪些直接子类和间接子类等等;该类的历史渊源——从哪个apiLevel开始存在。例如Intent(如下图):
这就告诉了我们Intent是一个public class,并且继承自Object,它还实现了Parcelable以及Cloneable接口。它有一个直接子类LabeledIntent。而且Intent自Api Level 1就已经存在了(元老级人物啊)。
(2)该类的整体介绍(Class Overview)。在这里会对该类进行一个功能上的和性质上的描述,语言简洁给力,是极为重要因而必须认真品读的一部分。例如LayoutInflater的Class Overview:
看完后大概就可以知晓:LayoutInflater是一个将XML文件中的layout信息进行实例化,转化为View类实例的工具类。而且十分令人兴奋的是,这里还给予了一个获得LayoutInflater的方法(中间java代码处),真是考虑的周到啊(当你看了Activity、View、Intent等的Class Overview后,你甚至会感动地“内牛满面”)!
(3)简述(Summary)。在这个地方会对该类的一切属性(没错,就是一切,包括了XML代码中会用到的属性)进行一个概括式的(通常是一句话)描述——主要目的就是方便你查找。这部分包含了如下几个小单元:
i.该类的内部类(Nested Classes)
在这里会将会介绍该类的全部内部类。想要查看某个内部类的具体信息,可以点击该内部类的链接,这样回跳到该内部类的文档界面。
ii.可以应用到该类上面的XML属性(XML Attributes)
很多童鞋在刚开始都有一些疑问:我该到哪里去找一个UI组件的XML属性介绍呢?我要把LinearLayout的背景设为某个图片,可我该用哪个XML属性呢?有没有哪个XML属性可以把我的Button变得更漂亮呢?刚开始我也十分困惑,而且总因为这些疑问得不到解决而郁闷。到后来我仔细研究了android sdk文档后,这些问题就大致得到解决了——因为文档里面有专门的一块来
介绍XML属性。例如ImageView的XML属性介绍:
看了Description后,是不是很多疑问都变成浮云啦(觉得给力就鼓掌吧,我可是不会介意的)?另外你可能会纳闷——中间的Related Method有什么用——这里就是重点了:这些Related
Method其实就是Related Method in java,也就是说在java代码中能够改变这个属性的相关该类的方法。例如,想给ImageView设置一个图片,你可以这样来android:src="@drawable/my_picture",而当你看到android:src属性还有一个setImageResource(int)的相关方法时,你就还可以这样来在java代码中设置:myImageView.setImageResource(R.drawable.my_picture);。还记得当初我发现这个可是好好的窃喜了一段时间的。
iii.继承而来的XML属性(Inherited XML Attributes)
没错,神奇的XML决定了android中的各种属性是可以通过继承从父类传递到子类的。当你在XML Attributes中找不到某个属性时,你可以在这里找找,一般是可以找到的。
iv.常量(Constants)
这里包含了该类拥有的一些常量。常量后面有简介,点击常量后会跳转到该常量的详细介绍。建议大家去看看Intent、Window等比较重要的类的常量介绍,相信我,很给力的。
v.继承来的常量(Inherited Constants)
从父类继承而来的常量。
vi.方法列举(Methods)
这里包含了该类所有的方法的索引式简介——包括public protected方法,构造器(constructors)方法。private方法就别想看到了,如果你想使用的话,先去看看sdk源代码,然后再利用反射来获取该方法吧。
(4)详细描述
此部分与简述部分进行一一对应,将简述部分的XML属性、常量和方法进行了更详细的描述。有的地方甚至还会提供一些范例供读者参考。
对于XML属性,这里会告诉你该给此属性赋予什么样的值:
clickable必须设置为一个boolean值
对于方法,这里会提供参数以及返回值的概述:
好啦,我承认这一部分很小白,请各位不要见怪。但我觉得介绍一个东西就要负责任地完整展示,所以就把这部分放上来了。想要拍砖的童鞋看完这部分后请把砖留在评论部分,如果砖的质量还不错,我会收藏的哦!
三、高 潮:android包介绍
当你打开Reference这页文档时,你在Pakage Index里首先看到就是android包。这个包也许许多童鞋还没进去光顾过吧——不过我得告诉你,这个包里面的东西可是给力指数8星级的哦!流口水了吧?好,咱们这就去看看里面的东东(这个包包含的东西相对结构简单些,所以一次性全部介绍完)。
android这个包里面
该包所含类:
(1)Manifest
好的,你肯定已经想到了android工程文件中的AndroidManifest.xml
文件,并且在猜想它和该类的“暧昧”关系了。Bingo!其实就是这样的——它们的关系十分亲密:Manifest类的实例其实一般是通过AndroidManifest.xml文件通过XML解析后生成的(如果你暂时无法理解,可以联想一下LayoutInflater这个将XML中的Layout解析为View类的实例这个很熟悉的过程)。Manifest实例中便保存了AndroidManifest.xml中的信息(Activity属性信息、权限使用信息)以协助系统处理你的应用——例如该把哪个Activity作为起始Activity、Activity是否禁止横屏显示等等。
(2)Manifest.permission和Manifest.permission_group
这两个类的主要成员是一些String。通过这些String,android实现了应用权限的的给予以及管理。
如果你在android程序中使用过Google Api的话,或者你曾经研究过调用相机来拍照的话,那你就对这几句代码不会陌生:
1 | <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> |
2 | <uses-permission android:name="android.permission.INTERNET"></uses-permission> |
3 | <uses-permission android:name="android.permission.CAMERA"> </uses-permission> |
这些代码都声明了你的应用的使用权限——位置获取功能使用权限、使用网络的权限、硬件相机的使用权限——如果你不声明权限的话,应用就会意外终止。而这些在AndroidManifest.xml中声明的语句其实也会在应用加载的过程中被解析为Manifest.permission和Manifest.permission_group中的String对象。
(3)R以及它的所有子类(从R.anim至R.xml)
这里的R代表的是Resource,也就是资源的意思。不难猜想到这一系列的类构成了android系统自带资源的集合。
R.anim:系统自带的android动画文件,包含我们熟悉的fade_in和fade_out
R.array:系统自带数组。
R.attr:这个类是十分给力的,因为android中所有的xml属性都在这里查得到——不用说常见的layout_height和layout_width,一些我们基本不会遇到的xml属性这里都有介绍。所以,以后如果在别人的代码中看到了一个自己闻所未闻的xml属性,就来这里查查吧——相信我,你不会失望的!
R.bool:很奇怪的类,因为它除了一个构造方法外什么都没有——他是干什么用的呢?期待大鸟解答!
R.color:一些系统平时会调用到的颜色资源(应该也就是一些RGB颜色码的数值吧),当然,你也可以在你的应用中调用,从而使它尽量和android系统保持一样的配色风格。
R.demon:看了文档我只知到它和android的程序启动器(android launcher)有关——因为它有一个属性是app_icon_size,这个属性定义了标准的应用图标大小。
R.drawable:一些系统会用到的drawable资源。
R.id:系统程序会调用到得组件的id。
R.integer:这里有一些常量,而且都用于控制android animation的时长——长、中等、短(config_longAnimTime、config_mediumAnimTime、config_shortAnimTime)。你可以在你自定义的animation中使用这些现成的时长,从而让你的animation符合android的本地特色。
R.layout:系统里面经常用到的layout文件都在这里。平时我们使用Spinner时常常会使用到android.R.layout.simple_list_item_single_choice就是出自这里。
R.plurals:和bool一样等待高人解释。
R.raw:没有任何成员被文档指出,但根据名字我猜想是系统的一些原生资源的集合地(例如开关机的声音文件)。
R.string:一些系统会调用的string对象。
R.style:系统内一些常用的android style文件(也就是一些主题(Theme)文件)。
写到这里,希望能够解决掉各位童鞋心中的些许抑或,一个我也很高兴很满足了。