Android PreferenceActivity与PreferenceFragment详解及简单实例

Android  PreferenceActivity与PreferenceFragment

前言

转来转去又回到了Android,闲话少说,这里是参考Android原生的Settings应用来介绍一下PreferenceActivity、PreferenceFragment和headers的使用。

PreferenceActivity

我们先通过一个简单的例子来学习一下PreferenceActivity的使用。

preferences_scenario_1.xml

我们先通过xml文件来定义一个简单的preference界面,res/xml/preference_scenario_1.xml:

<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <PreferenceScreen android:summary="@string/next_screen_title" android:title="@string/next_screen_summary" > <CheckBoxPreference android:key="@+id/next_screen_checkbox_preference" android:summary="@string/checkbox_summary" android:title="@string/checkbox_title" /> </PreferenceScreen> <PreferenceCategory android:title="@string/category_title" android:summary="@string/category_title"> <CheckBoxPreference android:defaultValue="false" android:key="pref_otificationskey" android:title="@string/checkbox_title" > </CheckBoxPreference> <ListPreference android:entries="@array/people_name" android:entryValues="@array/people_value" android:key="pref_SyncFrequencykey" android:summary="@string/list_summary" android:title="@string/list_title" > </ListPreference> </PreferenceCategory> </PreferenceScreen>

涉及到的string.xml内容如下:

<?xml version="1.0" encoding="utf-8"?> <resources> <string name="next_screen_title">下一屏选项</string> <string name="next_screen_summary">下一屏</string> <string name="checkbox_summary">我很帅</string> <string name="checkbox_title">我刷吗?</string> <string name="category_title">我喜欢</string> <string name="list_title">人名列表</string> <string name="list_summary">我喜欢的人名</string> </resources>

Preference Activity

在Android3.0之前,PreferenceActivity是用来呈现Preference Screens的,所以如果要支持Android3.0之前的系统,还是要继承PreferenceActivity类来呈现Preference Screens。示例代码如下:

import android.os.Bundle; import android.preference.PreferenceActivity; public class CustomPreferenceActivity extends PreferenceActivity{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preference_scenario_1); } }

重写oncreate方法,并且调用addPreferencesFromResource方法来加载xml布局文件。

别忘了,需要在AndroidManifest.xml中声明这个CustomPreferenceActivity。

注意:

PreferenceActivity的addPreferencesFromResource方法已经在Android3.0(API LEVEL 11)之后废弃了。Android3.0之后,推荐使用PreferenceFragment来呈现Preference Screen。

演示

在其他activity里,可以通过startActivity来启动这个PreferenceActivity,演示图如下:

PreferenceFragment

xml布局文件

xml文件我们可以复用上面PreferenceActivity的布局文件。

Preference Fragment

示例代码如下:

import android.os.Bundle; import android.preference.PreferenceFragment; public class CustomPreferenceFragment extends PreferenceFragment{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preference_scenario_1); } }

Preference Activity管理Fragment

示例代码如下:

import android.os.Bundle; import android.preference.PreferenceActivity; public class CustomPreferenceActivity extends PreferenceActivity{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); getFragmentManager().beginTransaction().replace(android.R.id.content, new CustomPreferenceFragment()).commit(); } }

适配

为了同时适配Android3.0之前之后的系统,我们可以通过Build.VERSION.SDK_INT在代码里自动判断来决定如何呈现Preference Screen。示例代码如下:

import android.os.Build; import android.os.Bundle; import android.preference.PreferenceActivity; public class CustomPreferenceActivity extends PreferenceActivity{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { addPreferencesFromResource(R.xml.preference_scenario_1); } else { getFragmentManager().beginTransaction().replace(android.R.id.content, new CustomPreferenceFragment()).commit(); } } }

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

时间: 2024-09-14 21:14:33

Android PreferenceActivity与PreferenceFragment详解及简单实例的相关文章

Android Build类的详解及简单实例

Android Build类的详解及简单实例 一.类结构: java.lang.Object ? android.os.Build 二.类概述:从系统属性中提取设备硬件和版本信息. 三.内部类: 1.Build.VERSION 各种版本字符串 2.Build.VERSION_CODES 目前已知的版本代码的枚举类 四.常量:UNKNOWN 当一个版本属性不知道时所设定的值.其字符串值为 unknown . 五.构造方法: Build () 六.静态属性 1.BOARD 主板:The name o

Android init.rc文件详解及简单实例

Android init.rc文件详解 本文主要来自$ANDROID_SOURCE/system/init/readme.txt的翻译. 1 简述 Android init.rc文件由系统第一个启动的init程序解析,此文件由语句组成,主要包含了四种类型的语句:Action,Commands,Services,Options.在init.rc文件中一条语句通常是占据一行.单词之间是通过空格符来相隔的.如果需要在单词内使用空格,那么得使用转义字符"\",如果在一行的末尾有一个反斜杠,那么

Android 三种动画详解及简单实例

Android 三种动画详解 帧动画 一张张图片不断的切换,形成动画效果 在drawable目录下定义xml文件,子节点为animation-list,在这里定义要显示的图片和每张图片的显示时长 <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="

Android 中Seekbar详解及简单实例

Android 中Seekbar详解及简单实例 做到音频播放和音乐播放时,大多数都要用到Seekbar.现在我先简单介绍下Seekbar的几个重要属性. android:max 设置值的大小 . android:thumb="@drawable/" 显示的那个可拖动图标,如果没有设置该参数则为系统默认,如果自己需要重新定义,则将自己需要的图标存放在资源目录 /res/drawable下,然后调用即可. android:thumbOffset 拖动图标的偏量值,可以让拖动图标超过bar的

Android 文件操作详解及简单实例

Android 文件操作详解 Android 的文件操作说白了就是Java的文件操作的处理.所以如果对Java的io文件操作比较熟悉的话,android的文件操作就是小菜一碟了.好了,话不多说,开始今天的正题吧. 先从一个小项目入门吧 首先是一个布局文件,这一点比较的简单,那就直接上代码吧. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http

AngularJS 路由详解和简单实例_AngularJS

AngularJS 路由 本章节我们将为大家介绍 AngularJS 路由. AngularJS 路由允许我们通过不同的 URL 访问不同的内容. 通过 AngularJS 可以实现多视图的单页Web应用(single page web application,SPA). 通常我们的URL形式为 http://runoob.com/first/page,但在单页Web应用中 AngularJS 通过 # + 标记 实现,例如: http://runoob.com/#/first http://r

AngularJS 模块详解及简单实例_AngularJS

AngularJS 模块 模块定义了一个应用程序. 模块是应用程序中不同部分的容器. 模块是应用控制器的容器. 控制器通常属于一个模块. 创建模块 你可以通过 AngularJS 的 angular.module 函数来创建模块: <div ng-app="myApp">...</div> <script> var app = angular.module("myApp", []); </script> "m

Websocket协议详解及简单实例代码_基础知识

Websocket协议详解 关于websocket的协议是用来干嘛的,请参考其他文章. WebSocket关键词 HTML5协议,实时,全双工通信,长连接 WebSocket比传统Http的好处 客户端与服务端只建立一个TCP连接,可以使用更少的连接 WebSocket的服务端可以将数据推送到客户端,如实时将证券信息反馈到客户端(这个很关键),实时天气数据,比http请求响应模式更灵活 更轻量的协议头,减少数据传送量 数据帧格式 下图为手工打造的数据帧格式 /** * fin |masked |

AngularJS ng-blur 指令详解及简单实例_AngularJS

AngularJS ng-blur 指令 AngularJS 实例 当输入框失去焦点(onblur)时执行表达式: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> </