偏好设置(4)3.0以后用Preference Headers给各偏好设置项分组 (2015-06-30 23:16)

转自: 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文件形如:

  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() 回调方法:

  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 布局样式形如:

  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-08-28 06:22:59

偏好设置(4)3.0以后用Preference Headers给各偏好设置项分组 (2015-06-30 23:16)的相关文章

偏好设置(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文件形如

VMware8.0虚拟机中安装Ubuntu12.04使用NAT设置连接网络

之前一直尝试使用“桥接”的方法,但是一打开虚拟机,本机windows就断网.最后不得不换种方法,还好尝试了很多遍终于使用NAT设置成功的联网了. 说明:本机windows连接的是无线网. 1.检查自己的windows系统的VMware DHCP Service 和 VMware NAT Service 这两个服务是否启动,如果未启动请启动. 2.启动VMnet8虚拟网卡.在windows7下,通过进入 控制面板->网络和共享中心->更改适配器设置 可以查看该虚拟网卡的状态.默认情况下,VMwa

自定义组件-preference 自定义(设置-关于-系统更新)的preference

有些用户在安装好Android SDK后,打开Android SDK Manager下载API时一直显示"Done loading packages"却迟迟不能前进.自己也出现了这种情况,把自己成功解决此问题的方法分享给大家. 方法/步骤 用户需要首先打开已下载的安卓SDK管理器"Android SDK Manager",然后点击菜单栏中的"Tools"菜单选项,接下来只需选择"Options"选项即可打开设置窗体. 接下来,

Packet Tracer 5.0实验(二) 交换机的Telnet远程登录设置

Packet Tracer 5.0实验(二) 交换机的Telnet远程登录设置 一.实验目标 掌握采用telnet方式配置交换机的方法 二.技术原理 配置交换机的管理IP地址(计算机的IP地址与交换机管理IP地址在同一网段): 为telnet用户配置用户名和登录口令: Switch(config)#enble password  xxxx           //设置进入特权模式的密码: Switch(config-line)#password xxxx              //可以设置通

Win2008 设置针对IE5.0 6.0的主页策略

Win2008 设置针对IE5.0  6.0的主页策略 在设置组策略针对xp客户端的时候,ie主页策略对xp客户端不生效,但对win7生效 查了好多资料,也找到了首选项里面的internet设置 并添加了 IE5.6的设置,也设置了主页,但是还是不生效,百思不得其解,用baidu根本查 不到相关的专业资料,google为啥这段时间打不开了,只要用bing并用了英文关键字查找, 翻了好久终于找到了,原来在设置主页的时候要按个"F6" 红色的底线才会变成绿色 不然不生效,悲催的微软,也搞了

老生常谈:ie6下,a标签href设置javascript:void(0);后绑定的click失效

老生常谈:ie6下,a标签href设置javascript:void(0);后绑定的click事件,如果有form表单提交或跳转等事件,会失效!举例: <a id="id_back" href="javascript:void(0);" title="返回管理">返 回</a> $("#id_back").click(function(){         $("#id_frm").

如何在离线或内网环境中设置Rancher 2.0

有时候,我们无法使用像GKE或AKE这样的托管服务,甚至处于离线或与外网隔离的状态,而无法直接访问互联网.然而,即使在这种情况下,仍然是有方法使用Rancher管理集群的. 本文中,我们将向你介绍如何在离线或内网环境中运行Rancher 2.0. 私有镜像库 因为所有与Rancher相关的服务都在容器中运行,因此首先你需要的是在环境中存储容器.在本文的示例中,我们将使用Docker Registry(Docker镜像仓库).如果你已经有了镜像仓库,可以跳过这些步骤. 注意:在Rancher 2.

前段时间说了AssetBundle打包,先设置AssetLabels,再执行打包,但是这样有个弊端就是所有设置了AssetLabels的资源都会打包,这次说说不设置AssetLabels,该如何打包AssetBundle

BuildPipeline.BuildAssetBundles() 这个函数,有多个重载,一个不用AssetBundleBuild数组,一个需要,如果设置了AssetLabels,那么这时候是不需要的,如果没有设置,那么我们就可以打包自定义项, AssetBundleBuild assetBundleBuild = new AssetBundleBuild();  我们可以new 出来一个 AssetBundleBuild  ,在这里指定他的  assetBundleName  和  asset

需要注意属性设置和qss的冲突(ui编辑qss,代码设置属性出现冲突)

background-color: rgb(175, 175, 175); 在UI编辑器中对widget设置这个qss, 下面是在代码中再次进行设置 QPalette palette; palette.setColor(QPalette::Background, QColor("#2162a9")); uTitleBar->setPalette(palette); 最后显示出来什么颜色都没有,我以为是不是因为添加了 dialog的resizeEvent出现问题,但是在没有resi