android setting的学习笔记
来源:互联网 发布:dijkstra算法 有向图 编辑:程序博客网 时间:2024/06/05 19:47
转自:http://blog.csdn.net/ican87/article/details/20615727
1、android settings的继承关系
Settings-->PreferenceActivity-->ListActivity-->Activity-->xxx
可以看到Settings是ListActivity的一个后代,可知Setting主界面的项都是放在一个ListView里面的。
2、android settings目录结构
由于需要修改Setting默认设定的需要,需要分析下Setting的源码,以及数据存储与读取。
Android自带的应用程序存储在packages/apps目录下。
其中resouce是资源文件,src是源代码,tests中含有测试代码。
而Android.mk和AndroidManifest.xml分别是编译以及应用程序全局数据。
3、android settings数据库
settings数据库存储于com.android.providers.settings/databases/settings.db。
android的数据库是采用SQLite存储的,把settings.db复制出来,然后使用sqlite管理工具打开,可以看到里面的值。
android settings学习笔记(二)-细节分析
1、Settings类
设置页面的Activity:
public class Settings extends PreferenceActivity implements ButtonBarHandler{}
因为从3.0中就引入了Fragment机制,所以在Settings里面就只有这一个Acitivity类,而进入表中的某项设置后,不是进入到新的Activity,而是在原来的Activity上切换了一个UI界面而已。
2、Settings Fragment
Android 4.0上Settings使用了Framgment机制。Fragment是我们在单个Activity上要切换多个UI界面,显示不同内容,对不同的界面不再使用不同的Activity。
3、Settings主界面的实现方法
为了能适应平板和手机,Settings采用了PreferenceActivity和PreferenceFragment结合的实现方式。
Settings类继承自PreferenceActivity,是Settings的主界面,它通过loadHeadersFromResource函数加载res/xml/settings_headers.xml来构造界面。在settings_headers.xml中声明了要在Settings主界面显示的各个header(如Sound、Display等)。
4、我们使用hierarchyviewer时Settings中的很多界面显示的都是SubSettings
要解决这个问题我们先要清楚为什么会写一个SubSettings.java继承自Settings.java?
SubSettings.java中的注释很清楚的告诉了我们原因:Stub class for showing sub-settings; we can't use the main Settings class since for our app it is a special singleTask class。原来是因为Settings.java在声明时指定了android:launchMode="singleTask"。
5、hierarchyviewer中显示SubSetting时如何确定我进入的是哪个fragment?
在res/xml/settings_headers.xml中声明了各个header被点击后使用的fragment。我们可以根据这个文件确定我们进入的fragment。
例如,当我们点击Display时hierarchyviewer中显示SubSetting。我们通过查找settings_headers就可知道使用的是哪个fragment。
Display这个header在settings_headers.xml中的声明:
<!-- Display -->
<header
android:id="@+id/display_settings"
android:icon="@drawable/ic_settings_display"
android:fragment="com.android.settings.DisplaySettings"
android:title="@string/display_settings" />
header中使用android:fragment指明使用的fragment。由此可知,Display使用的是com.android.settings.DisplaySettings这个fragment。
6、点击设置界面的某一个header时,设置界面是如何切换的?
点击设置界面的header时,会触发Settings中onHeaderClick函数,主要的处理都在其父类PreferenceActivity的onHeaderClick中实现的。如果这个header指定了fragment,在mSinglePane为true时,会调用startWithFragment方法,在startWithFragment方法中将调用onBuildStartFragmentIntent方法来构造intent对象(重要),最后使用该intent对象启动一个activity来显示fragment。
- android setting的学习笔记
- Android学习笔记(二十):关于Toolbar中的setting menu不显示的问题
- android Setting 模块的学习之一(PreferenceActivity学习)
- Torch7 学习笔记[3] --option setting
- maven学习笔记3--setting.xml配置文件
- android setting laucher systemui 源码学习
- .setting学习
- android Setting
- Android Setting
- Android的Setting的显示加载分析
- android Setting 里的设置与储存
- android的setting语言列表 rk3188
- android setting的剖析与修改
- loadrunner学习笔记(Run-time setting 运行时设置)3
- opengl 学习笔记(1)setting up opengl
- ios build setting笔记
- ios setting.bundle 学习
- Android初学的学习笔记
- CSS实现居中的7种方法
- SQL Server 索引列的顺序——真的没关系吗
- 基于查找表的灰度拉伸
- 为你的Android App实现自签名的 SSL 证书
- ios webservice编程:soap封装调用,返回xml,json解析
- android setting的学习笔记
- 四叉数之Box索引Point
- 如何注册有价值的TOP域名
- 一段时间以来,我在思索一个问题:如何让别人知道你的产品?
- sql server 创建分区表
- 简单总结Service-与Activity生命周期
- source insight高速定位文件
- shell脚本监视进程
- 查询oracle中所有用户信息