偏好设置(3)给各偏好设置项分组

转自: http://blog.csdn.net/ixiaobu/article/details/8609935

1. 问题提出:如何处理需要分屏分组的设置项?

在谷歌开发文档中以Android 3.0版本作为基线,对此问题进行不同的处理:

  • Android 3.0之前:采用PreferenceScreen嵌套的方法;
  • Android 3.0及之后:采用Preference Headers的方法。

2. 采用 PreferenceScreen 嵌套

采用此方法的preference.xml文件形如:

[html] view plaincopy

  1. <PreferenceScreen  xmlns:android="http://schemas.android.com/apk/res/android">
  2. <!-- opens a subscreen of settings -->
  3. <PreferenceScreen
  4. android:key="button_voicemail_category_key"
  5. android:title="@string/voicemail"
  6. android:persistent="false">
  7. <ListPreference
  8. android:key="button_voicemail_provider_key"
  9. android:title="@string/voicemail_provider" ... />
  10. <!-- opens another nested subscreen -->
  11. <PreferenceScreen
  12. android:key="button_voicemail_setting_key"
  13. android:title="@string/voicemail_settings"
  14. android:persistent="false">
  15. ...
  16. </PreferenceScreen>
  17. <RingtonePreference
  18. android:key="button_voicemail_ringtone_key"
  19. android:title="@string/voicemail_ringtone_title"
  20. android:ringtoneType="notification" ... />
  21. ...
  22. </PreferenceScreen>
  23. ...
  24. </PreferenceScreen>

这样,所有分屏的设置说明都将集中在一个xml文件中。

另外,为了能够显示出 headers 中的布局列表,需要在继承的 PreferenceActivity 类中实现 onBuildHeaders() 回调方法:

[java] view plaincopy

  1. public class SettingsActivity extends PreferenceActivity {
  2. @Override
  3. public void onBuildHeaders(List<Header> target) {
  4. loadHeadersFromResource(R.xml.preference_headers, target);
  5. }
  6. }

3. 采用 Preference Headers

Android 3.0之后,摈弃了传统的 PreferenceScreen 嵌套方法,而是采用了所谓的 Preference Headers 方法,该方法的要点是:在主屏中通过 headers xml 文件布局列出所有的主题设置项,而每个主题设置的详细设置则由各自指定的 PreferenceFragment 负责,而各自的 PreferenceFragment 可以如传统的 PreferenceActivity 一样布局自身的 PreferenceScreen。

headers xml 布局样式形如:

[html] view plaincopy

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
  3. <header
  4. android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentOne"
  5. android:title="@string/prefs_category_one"
  6. android:summary="@string/prefs_summ_category_one" />
  7. <header
  8. android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentTwo"
  9. android:title="@string/prefs_category_two"
  10. android:summary="@string/prefs_summ_category_two" >
  11. <!-- key/value pairs can be included as arguments for the fragment. -->
  12. <extra android:name="someKey" android:value="someHeaderValue" />
  13. </header>
  14. </preference-headers>

4. 采用 Preference Headers 的好处

我认为采用此方法有如下优点:

  • 方便同一个应用在不同屏幕大小的设备中进行适配,比如,采用 preference headers 布局之后,系统设置应用在 phone 和 pad 中的显示方式分别如下图所示:

phone 设备分屏布局

pad 设备分屏布局

  • 从程序设计的角度,采用 headers 可以降低 preference 布局文件的耦合度,把原本需要写在同一个xml文件中的布局各自独立开来,各自进行控制和维护而互不影响。
  • 其它优点:望高手赐教。

5. 参考

  • http://developer.android.com/guide/topics/ui/settings.html
  • http://developer.android.com/reference/android/preference/PreferenceActivity.html
时间: 2024-11-10 07:07:03

偏好设置(3)给各偏好设置项分组的相关文章

如何设置select下拉菜单option项显示的数目

如何设置select下拉菜单option项显示的数目: 本章节介绍一下如何设置select下拉菜单的可见的option项的数目,代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.51texiao.cn/" /> <title>蚂蚁

《SQL Server企业级平台管理实践》读书笔记——SQL Server如何设置自动增长和自动收缩项

原文:<SQL Server企业级平台管理实践>读书笔记--SQL Server如何设置自动增长和自动收缩项 SQL Server允许用户设置数据库初始值和最大值,可以通过自动增长或者自动收缩进行配置.通过这些配置,我们可以防止数据库空间问题而导致的应用程序修改失败或者SQL Server磁盘空间耗尽的事情发生.一般来讲,如果数据库不是很忙,默认的设置为自动增长,这种方式能够满足大部分的需求.但是在大量并发的情况下,申请数据文件和日志文件增长本身是一件非常消耗系统资源和影响性能的工作.所以如果

win7设置虚拟网卡以及如何设置静态IP

首先来说明一下我用的虚拟机是VMware-workstation-6.5.1物理机平台是Win7旗舰版(说实在现在很多教程都还是以古老的XP系统来讲解的我以我就试着在Win7下小试一下.),人家都说嵌入式并不难,但是为什么还是有很多对嵌入式感兴趣的小伙伴最后放弃了呢?以我的拙见可能就是大家对linux系统(温馨提示:此处我说的Linux系统是指PC机上的.)的不熟悉导致的,有些小伙伴就问了这个学嵌入式怎么跑到Linux系统了呢,多方面的原因其中最重要的是因为我们图便宜-系统开源免费呗!既然我们选

Ubuntu 桌面设置之网络环境的设置

Ubuntu 桌面设置之网络环境的设置 由于无线技术的扩展,很多情况下,并不依赖于有线环境的联通而能实现大家对网络的需求,比如在图书馆,在实验室,在飞机场,星巴克等等.尽管有很多时候,都可以使用系统的默认设置,但是,更多时候,需要自己手动设置,甚至需要修改一下配置文件. 在我们实验室的网络环境下,是4台无线路由进行无缝连接,其中一台路由转发信号,构建了3个子网.由于廉价路由的通性,获取不到IP,连接不上ROUNTER的情况时有发生,所以,有必要对客户端的电脑进行设置,在WIN下面,可以说是极为简

(转)中国电信友华PT921、PT921G光猫设置路由,无线WIFI设置

中国电信友华PT921.PT921G光猫设置路由,无线WIFI设置. 第一步,用管理员帐号密码登陆,打开浏览器,输入http://192.168.1.1 登陆帐号:telecomadmin登陆密码:nE7jA%5m 第二步,点开网络-宽带设置,按下图设置好,保存即可 第三步,我们还需要设置WIFI,默认是开启的,但为了方便使用,我们需要修改一下连接名称和密码.如图: 原文地址: http://www.71712.cn/a_138.html

PLSQL设置显示的字符集及设置

一.关于PLSQL无法正确显示中文 刚才下载安装了PLSQL Developer 9.0.0.1601 汉化绿色版,执行SQL查询语句,发现显示的数据中只要有中文都会以?表示.经过网上查询得知这是客户端跟服务器的字符集不匹配造成的.解决方法如下:1.查询oracle server端的字符集.打开PLSQL的查询窗口中输入下面SQL查询语句.select userenv('language') from dual; 得到的服务器字符集为:SIMPLIFIED CHINESE_CHINA.ZHS16

LoadRunner中Action的迭代次数的设置和运行场景中设置

LoadRunner中Action的迭代次数的设置和运行场景中设置 LoadRunner是怎么重复迭代和怎么增加并发运行的呢? 另外,在参数化时,对于一次压力测试中均只能用一次的资源应该怎么参数化呢?就是说这些资源用了一次就不能在用了的. --参数化时,在select  next row选择unique,update value on选择 each occurence, 1. 迭代跟虚拟用户数没什么必然联系 迭代是这样的: 迭代1次   迭代2次  迭代3次 用户1     X1        

html5移动端页面分辨率设置及相应字体大小设置的靠谱使用方式

对于动端网页编写CSS网上有很多介绍的文章,但在实际使用过程中还是会纠结. 网上的资料太多,且大多都是技术介绍型,特别是针对android上,网上写的各种麻烦,各种复杂,各种不接地气儿... 我在做移动端网页时,总是和美工设计的页面有出入,主要还是由于双方对移动端HTML5实现页面还了解还不够. 今天就研究一下各大互联网公司对于移动端页面的处理方式. 主要研究对象:BAT(度娘,阿狸,企鹅)这几家的移动端网站或webapp 主要研究点:viewport的设置,字体的设置,图片原始宽高设置 汝甚吊

02---按钮的设置 控制器拥有导航栏包装一层导航控制器 添加子控制器 UIBarButtonItem导航按钮 设置导航栏UINavigationBar主题 设置状态栏样式

一.按钮的设置 1.设置背景图片 [btn setBackgroundImage:image forState:UIControlStateNormal]; 2.内部UIImageView 1> 设置内部UIImageView的图片 [btn setImage:image forState:UIControlStateNormal]; // 不能写成btn.imageView.image = image; 2> 调整内部图片的内容模式 self.imageView.contentMode =

VMWare中Linux虚拟机设置静态IP上网的设置方法

VMWare中Linux虚拟机设置静态IP上网的设置方法 标签: vmwareLinux虚拟机securecrt静态IP上网 2016-05-18 02:30 702人阅读 评论(0) 收藏 举报  分类: Linux 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 现在大部分人的家庭网络环境都是通过无线路由器为家里的电脑和手机提供网络. 在使用VMware安装Linux之后,默认使用的是DHCP连接网络. 但是如果使用类似 SecureCRT以SSH方式连接到虚拟机上的