菜鸟Android4.0 Settings分析(一)
先声明:本人工作半年,是真的菜鸟,之前有做过2.3的Launcher,没有记录下来,感觉挺可惜的,现在老大叫我搞Setting,我觉得是得写得东西,记录下自己的工作。设备都还没到,现在只能看看代码,就先记录下看代码的收获吧。。
注意:Fragment是android3.0以上才支持的,3.0之前得导jar包,我在找Setting里面ListView的item的click事件时找了好久,因为之前关联的是2.3的源码,当我跳到PreferenceActivity类里面想看下Header类里,一直找不到(sb了),最后到官方的Reference上去找才想起来自己的源码关联的是2.3的(真的sb了...)。。。
Settings的包结构:
一、Setting的主界面
1、布局
4.0的Setting是采用PreferenceFragment的形式进行布局的。
它的布局文件是xml文件夹下的:settings_headers.xml
这个布局文件下面全是<Header></Header>标签,e.g:
<header android:title="@string/header_category_wireless_networks" />
这个代表的界面就是:

设置界面最上面的一个分类(category)
2、com.android.settings.Settings.java主activity
实现onBuildHeaders()回调用来指定头文件,即加载界面对应的Fragment
调用loadHeadersFromResource()方法对界面进行加载
HEADER_TYPE_NORMAL代表一个常规项,像这个:
HEADER_TYPE_SWITCH代表一种开头形式的类型,像这个:
getView()方法中也是根据三种不同的类型,加载不同的view以及数据。
显示基本上就这样了,下面就是事件的响应了,点击一个item后的响应。查看一下PreferenceActivity的源码,可以看到PreferenceActivity重写了ListActivity的这个文法public void onHeaderClick(Header header, int position) {if (header.fragment != null) {if (mSinglePane) {int titleRes = header.breadCrumbTitleRes;int shortTitleRes = header.breadCrumbShortTitleRes;if (titleRes == 0) {titleRes = header.titleRes;shortTitleRes = 0;}startWithFragment(header.fragment, header.fragmentArguments,null, 0, titleRes, shortTitleRes);} else {switchToHeader(header);}} else if (header.intent != null) {startActivity(header.intent);}}
今天就到这里,明天继续。。。。