【学习笔记】Android PreferenceActivity 详解教程
2012-04-02 16:58
567 查看
为了引入这个概率 首先从需求说起 即:现有某Activity专门用于手机属性设置 那么应该如何做呢?
根据已学知识 很快一个念头闪过 即:Activity + Preference 组合 前者用于界面构建 后者用于设置数据存放 其实 这是正确的 但是 这会比较繁琐 因为 每个设置选项 都要建立与其对应的Preference
所以 现在有更好的选择了 那就是本文的主角:PreferenceActivity
从名字应该可以看出 其实 Activity 与 Perference 的混合物
还是从需求说起 常见属性设定 有哪几种方式:
1. CheckBox 用于 确定/取消 某项功能 如:是否静音 对应于:CheckBoxPreference 其在Preference 有一个选项与其自动绑定 下同
2. ListView 用于列出所有选择 如:铃声选择 列出所有声音供选择使用 对应于:ListPreference
3. 属性结合 用于列出一系列相关属性 如:所有与短消息有关的功能 对应于:PreferenceScreen 该项仅用于界面 故与Preference无关
界面 其实 讨论这个 比较鸡肋 大家自己试着运行就一目了然了 所以 觉得还是以步骤为主
鉴于PreferenceActivity使用 网络很多 故此略过 为了给自己备份 防止以后用到 大致叙述一下
2.导入setting
3. 其实 关于PreferenceActivity 问题 基本结束了 但是 初次使用 会碰到一些坎坷 现一一讨论
4. 监听设定变化问题 普通布局里的监听 比较简单 先通过findViewById()获得目标View 再在其上注册监听器即可
但是 PreferenceActivity 并没有提供findViewById() 也就无法监听 那么 怎么做呢?
- 得到SharedPreferences 句柄
- 在 sp 之上注册改变监听器
5. Preference 异地使用 即:PreferenceActivity 在一个应用程序 而别处应用程序可能也想改变该数据 怎么做呢?
- 通过getSharedPreferences() 得到SharedPreferences实例
-取值
-赋值
根据已学知识 很快一个念头闪过 即:Activity + Preference 组合 前者用于界面构建 后者用于设置数据存放 其实 这是正确的 但是 这会比较繁琐 因为 每个设置选项 都要建立与其对应的Preference
所以 现在有更好的选择了 那就是本文的主角:PreferenceActivity
从名字应该可以看出 其实 Activity 与 Perference 的混合物
还是从需求说起 常见属性设定 有哪几种方式:
1. CheckBox 用于 确定/取消 某项功能 如:是否静音 对应于:CheckBoxPreference 其在Preference 有一个选项与其自动绑定 下同
2. ListView 用于列出所有选择 如:铃声选择 列出所有声音供选择使用 对应于:ListPreference
3. 属性结合 用于列出一系列相关属性 如:所有与短消息有关的功能 对应于:PreferenceScreen 该项仅用于界面 故与Preference无关
界面 其实 讨论这个 比较鸡肋 大家自己试着运行就一目了然了 所以 觉得还是以步骤为主
鉴于PreferenceActivity使用 网络很多 故此略过 为了给自己备份 防止以后用到 大致叙述一下
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <CheckBoxPreference android:key="autoBack" android:title="自动回复" android:summaryOn="开启" android:summaryOff="关闭" android:defaultValue="true" /> <PreferenceCategory android:title="SMS 助手"> <CheckBoxPreference android:key="smsSilence" android:title="静音" android:summaryOn="开启" android:summaryOff="关闭" android:defaultValue="false" /> <PreferenceScreen android:title="更多选项"> <CheckBoxPreference android:key="cb21" android:title="功能1" android:summaryOn="开启" android:summaryOff="关闭" android:defaultValue="true" /> <CheckBoxPreference android:key="cb22" android:title="功能2" android:summaryOn="使用" android:summaryOff="停用" android:defaultValue="true" /> <ListPreference android:key="list1" android:title="android forum" android:summary="开发论坛" android:dialogTitle="请选择论坛" android:entries="@array/entries_list_preference" android:entryValues="@array/entriesvalue_list_preference" /> <EditTextPreference android:key="et1" android:title="EditTextPreference Sample" android:summary="点击输入" android:dialogTitle="输入设置" android:defaultValue="Hello EditTextPreference" /> </PreferenceScreen> </PreferenceCategory> <PreferenceCategory android:title="其他选项"> <RingtonePreference android:key="rt1" android:title="RingtonePreference Sample" android:summary="选择铃声" /> </PreferenceCategory> </PreferenceScreen>
2.导入setting
addPreferencesFromResource(R.xml.settings);
3. 其实 关于PreferenceActivity 问题 基本结束了 但是 初次使用 会碰到一些坎坷 现一一讨论
4. 监听设定变化问题 普通布局里的监听 比较简单 先通过findViewById()获得目标View 再在其上注册监听器即可
但是 PreferenceActivity 并没有提供findViewById() 也就无法监听 那么 怎么做呢?
- 得到SharedPreferences 句柄
sp = PreferenceManager.getDefaultSharedPreferences(this);
- 在 sp 之上注册改变监听器
sp.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener(){ @Override //sharedPreferences:句柄 //key: 改变 键值 public void onSharedPreferenceChanged( SharedPreferences sharedPreferences, String key) { // TODO Auto-generated method stub if(key.equals("autoBack")){ Boolean autoBack = sharedPreferences.getBoolean("autoBack", false); if(autoBack){ Log.d("TAG","autoBack: true!"); } else { Log.d("TAG","autoBack: false!"); } } } });
5. Preference 异地使用 即:PreferenceActivity 在一个应用程序 而别处应用程序可能也想改变该数据 怎么做呢?
- 通过getSharedPreferences() 得到SharedPreferences实例
spc = this.getSharedPreferences("com.android.PreferenceActivity.Usage_preferences.xml", MODE_WORLD_READABLE );
-取值
Boolean autoBack = spc.getBoolean("autoBack", false);
-赋值
public void putValue(String key, Boolean value){ spe = spc.edit(); spe.putBoolean(key, value); spe.commit(); }
相关文章推荐
- Android(java)学习笔记93:Android布局详解之一:FrameLayout
- Android开发学习笔记:Intent的简介以及属性的详解
- Java 当中的IO(二)-- MarsChen Java4Android 教程学习笔记
- ProgressBar --MarsChen Android 开发教程学习笔记
- Android开发学习笔记:Intent的简介以及属性的详解
- Android开发学习笔记:5大布局方式详解
- Java 当中的I/O(一) -- MarsChen Java4Android 教程学习笔记
- 时间与日期--MarsChen Android 开发教程学习笔记
- Android开发学习笔记:Intent的简介以及属性的详解
- Android开发学习笔记:Intent的简介以及属性的详解【转】
- Animations(通过Java 代码控制) -- MarsChen Android 开发教程学习笔记
- Android开发学习笔记:Intent的简介以及属性的详解
- three20 教程 学习笔记 three20 NetWork 详解
- Android开发学习笔记:Intent的简介以及属性的详解
- 文件下载 -- MarsChen Android 开发教程学习笔记
- 相对布局(作业)-- MarsChen Android 开发教程学习笔记
- Gradle for Android 学习笔记(一) 下载并安装gradle(Linux 环境),小白也能看懂的gradle教程
- Android 学习笔记 Contacts (一)ContentResolver query 参数详解
- Android开发学习笔记:Intent的简介以及属性的详解
- three20 教程 学习笔记 three20 NetWork 详解