在Android系统中,当我们点击Menu按钮时,则会弹出Menu的菜单选项,其中一项是设置选项,点击了设置选项后,则会弹出系统的设置Activity界面,这些设置功能是如何实现的呢?Android系统本身就大量用到了PreferenceActivity来对系统进行信息配置和管理,那么它是怎么保存数据的呢,如何创建PrefenceActivity的呢,更关键是怎样触发相应事件的呢。
Android系统有四种基本的数据保存方法,一是SharedPreference,二是文件,三是SQLite,四是ContentProvider。PreferenceActivity是如何保存的数据,其实就是通过SharedPreference键值对的形式来保存数据的。
下面我们以一个例子来说明如何在Android系统中制作一个设置的功能。先看下该例子的大概框架图:
在src中有两个Activity,其中PreferenceDemo.java是显示Menu页面,MyPreference.java是设置页面;在res/xml目录下有个mypreference.xml的文件,该文件是设置页面的布局文件,在添加该xml文件的时候,注意是选择的不是Layout,而是Preference,而且注意Folder路径是 res/xml。
下面是各个文件的源代码:
1. mypreference.xml 的源码如下:
- <?xml version="1.0" encoding="utf-8"?>
- <PreferenceScreen
- xmlns:android="http://schemas.android.com/apk/res/android">
- <PreferenceCategory android:title="我的位置" android:key="set_local">
- <CheckBoxPreference
- android:key="apply_wifi"
- android:title="使用无线网络"
- android:summary="使用无线网络在应用程序(例如Google地图)中查看位置"
- android:defaultValue="true" >
- </CheckBoxPreference>
- <CheckBoxPreference
- android:key="apply_gps"
- android:title="使用GPS"
- android:summary="定位到街道级别(需要消耗更多的电量以及天气允许)">
- </CheckBoxPreference>
- </PreferenceCategory>
- <PreferenceCategory android:title="无线和网络设置">
- <CheckBoxPreference
- android:key="apply_fly"
- android:title="飞行模式"
- android:summary="禁用所有无线连接">
- </CheckBoxPreference>
- <CheckBoxPreference
- android:key="apply_internet"
- android:title="Internet共享"
- android:summary="禁用通过USB共享Internet连接">
- </CheckBoxPreference>
- <CheckBoxPreference
- android:key="apply_wifi"
- android:title="Wi-Fi"
- android:summary="打开Wi-Fi">
- </CheckBoxPreference>
- <Preference
- android:key="wifi_setting"
- android:title="Wi-Fi设置"
- android:summary="设置和管理无线接入点"
- android:dependency="apply_wifi">
- </Preference>
- <CheckBoxPreference
- android:key="apply_bluetooth"
- android:title="蓝牙"