【转】 Pro Android学习笔记(六二):Preferences(6):header
在前面的例子,我们主要学习了PreferenceScreen的xml如何写,preference有哪些类型。在代码中,我们为了不提示warning,加入了@SuppressWarnings("deprecation"),表明这是老版本的处理方式。自从Android 3.0引入fragment后,preference在实现有变化。
PreferenceActivity能够根据设备的尺寸大小不同,提供不同的UI,如设备是平板,显示如下。左边是preference header,右边是PreferenceScreen对象。

如设备是phone,显示如下:

代码实现
public class HeadPreferenceActivity extends PreferenceActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(hasHeaders()){ //如有header,则在最下面加一个button。本例无论平板还是phone,都返回true
Button button = new Button(this);
button.setText("Some Action");
setListFooter(button);
}
}
@Override // 在PreferenceActivity的回调函数onBuildHeaders()中加入header
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.header, target);
}
// 如果不作为Fragment内部类,例如独立作为一个类,则不需要static,PreferenceFragment和之前老的PreferenceActivity相似,我们在此通过res/xml的资源加入PreferenceScreen。
public static class Pref1Fragment extends PreferenceFragment{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i("PRO args", "Pref1Fragment Arguments: " + getArguments());
addPreferencesFromResource(R.xml.sound); //R.xml.sound为之前学习过的PreferenceScreen xml文件
}
}
public static class Pref2Fragment extends PreferenceFragment{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i("PRO args", "Pref2Fragment Arguments: " + getArguments()); //可以从xml文件中读取参数,类型为Bundle
addPreferencesFromResource(R.xml.complex); //R.xml.complex为之前学习过的PreferenceScreen xml文件
}
}
}
在代码实现中,关键在于header的加入,我们来看看res/xml/header.xml文件
header xml文件
<?xml version="1.0" encoding="utf-8"?>
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 和fragment class属性相似,fragment属性为PreferenceFragment的类,用于用户点list中的改header后,获取对应的PreferenceScreen对象。本例为内部类 -->
<header android:fragment="cn.wei.flowingflying.propreferences.HeadPreferenceActivity$Pref1Fragment"
android:icon="@drawable/creep"
android:title="Sound"
android:summary="These are sound preferences" />
<!-- 第二个header,我们增加了extra data,可以在代码中读取,本例通过Log.d将相关信息显示,如下。用户按第一个header,显示第一行,参数为null,用户按第二个header时,显示第二行,通过Bundle来传递Extra信息 -->

<header android:fragment="cn.wei.flowingflying.propreferences.HeadPreferenceActivity$Pref2Fragment"
android:icon="@drawable/creep003"
android:title="Complex"
android:summary="These are complex preferences" >
<extra android:name="someKey" android:value="someHeaderValue" />
</header>
<!-- 这是非内部类的试验,只要是PreferenceFragment,无论是否静态类、内部类,都可以
<header android:fragment="cn.wei.flowingflying.propreferences.ListPreferenceFragment"
android:icon="@drawable/creep004"
android:title="List Preferences"
android:summary="These are list preferences" /> -->
<!-- header也可以通过intent唤起其他activity,而不只限于preference fragment,本例将通过浏览器打开某网页 -->
<header android:icon="@drawable/ic_launcher"
android:title="Intent"
android:summary="Launches an Intent.">
<intent android:action="android.intent.action.VIEW" android:data="http://www.android.com" />
</header>
</preference-headers>
本博文涉及的例子代码,可以在Pro Android学习:Preference(首选项)小例子中下载。
相关链接: 我的Android开发相关文章
【转】 Pro Android学习笔记(六二):Preferences(6):header的更多相关文章
- 【转】 Pro Android学习笔记(二二):用户界面和控制(10):自定义Adapter
目录(?)[-] 设计Adapter的布局 代码部分 Activity的代码 MyAdapter的代码数据源和构造函数 MyAdapter的代码实现自定义的adapter MyAdapter的代码继续 ...
- 【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge
目录(?)[-] xml控件代码重用include xml控件代码重用merge 横屏和竖屏landsacpe portrait xml控件代码重用:include 如果我们定义一个控件,需要在不同的 ...
- 【转】Pro Android学习笔记(二五):用户界面和控制(13):LinearLayout和TableLayout
目录(?)[-] 布局Layout 线性布局LinearLayout 表格布局TableLayout 布局Layout Layout是容器,用于对所包含的view进行布局.layout是view的子类 ...
- 【转】Pro Android学习笔记(二):开发环境:基础概念、连接真实设备、生命周期
在Android学习笔记(二):安装环境中已经有相应的内容.看看何为新.这是在source网站上的Android架构图,和标准图没有区别,只是这张图颜色好看多了,录之.本笔记主要讲述Android开发 ...
- 【转】 Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner
目录(?)[-] GridView Spinner GridView GridView是网格状布局,如图所示.在了解ListView后,很容易了解GridView.下面是例子的XML文件. <? ...
- 【转】Pro Android学习笔记(二六):用户界面和控制(14):RelativeLayout
相对布局:RelativeLayout RelativeLayout也是非常常用的布局,能够精确对控件的位置进行网格对齐,可以设置在控件与其他控件的相对位置,以及控件在容器中的位置.缺省控件的位置为最 ...
- 【转】 Pro Android学习笔记(二一):用户界面和控制(9):Gallery和SimpleAdapter
Gallery画廊式控件,如图所示,但是在API level 16,也即Android 4.1,被deprecated,可以使用HorizontableScroolView和ViewPager.但是后 ...
- 【转】Pro Android学习笔记(二四):用户界面和控制(12):Style和Theme
目录(?)[-] 静态格式 代码中设定 Style Theme 静态格式 在res/values中设置静态的Style,在资源中设置静态Style可使用的HTML格式有<i> <u& ...
- 【转】 Pro Android学习笔记(五二):ActionBar(5):list模式
可以在action bar中加入spinner的下来菜单,有关spinner,可以参考Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner. list的样式和 ...
- 【转】 Pro Android学习笔记(八二):了解Package(1):包和进程
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在之前,我们已经学习了如何签发apk,见P ...
随机推荐
- 最简单的 GitExtensions 教程(持续更新中)
一.安装 GitExtensions 下载 GitExtensions 完全版,一直点 Next,安装全部组件. 二.将项目文件夹/文件提交到 Git 服务器(以 GitHub 为例) 新建一个文件夹 ...
- 页游手游服务器(五)sql缓存层
sql的通用缓存,是实现最麻烦的一部分,对于查询结果的缓存,主要有如下的结构来缓存: cache tablename--player statement--select * from player w ...
- spring struts2整合
把struts2的action交给spring管理 一.导入相应jar包 导入与spring有关的基本jar包,和与struts2有关的基本jar包 还需要导入 struts2-spring整合jar ...
- antd-mobile的例子--cnode
antd-mobile 简单的例子 预览地址 https://shenggen1987.github.io/antd-mobile-roadhog/#/crm/pages/users githu ...
- java访问微信接口发送消息
最近在开发activiti流程的时候有个需求:流程到达每个审批节点后,需要向该节点的审批人发送一个消息,提示有审批需要处理. 参考了一下微信的开发者文档和网络上的一些技术博客,现在记录一下.以便后续继 ...
- php面向对象加载类
php加载类: 新建php文件用驼峰法命名类名: 每个单词首字母大写,后面加.class.php表示这是php类文件.例如: ClubMember.class.php 若为纯php页面,<?ph ...
- 3.09课·········for循环
for循环:反复执行某段代码.for循环四要素:初始条件,循环条件,循环体,状态改变.for(初始条件;循环条件;状态改变){ 循环体} 若初始条件满足循环条件,则进入循环体,执行完循环体,跳回到状态 ...
- 创建图形用户界面GUI和事件监听机制的简单实现(java)
创建图形化界面 1.创建Frame窗体 2.对窗体进行基本设置 比如:大小.位置.布局 3.定义组件 4.将组建通过窗体添加到窗体中 5.让窗体显示,通过setVisib ...
- 【Linux不需要磁盘碎片整理的真正原因是因为Linux只是一个内核,它没有磁盘可以整理】
[Linux不需要磁盘碎片整理的真正原因是因为Linux只是一个内核,它没有磁盘可以整理]
- perl常用字符串函数
1.$position = index(string,substring,skipchars): 该函数返回子串substring在字符串string中的位置,如果不存在,则返回-1:参数skipch ...