Android PreferenceActivity 理解

          对于Android Activity和PreferenceActivity的区别,今天搞了一个下午总算有点头绪了。参考http://blog.csdn.net/wujiangming/article/details/6218068http://blog.csdn.net/wdaming1986/article/details/6919653

为了引入这个概率 首先从需求说起 即:现有某Activity专门用于手机属性设置 那么应该如何做呢?根据已学知识 很快一个念头闪过 即:Activity + Preference 组合 前者用于界面构建 后者用于设置数据存放  其实 这是正确的 但是 这会比较繁琐 因为 每个设置选项 都要建立与其对应的Preference 所以  现在有更好的选择了 那就是本文的主角:PreferenceActivity 从名字应该可以看出 其实 Activity 与 Perference 的混合物还是从需求说起  常见属性设定  有哪几种方式:1. CheckBox  用于 确定/取消  某项功能    如:是否静音   对应于:CheckBoxPreference   其在Preference 有一个选项与其自动绑定 下同2.  ListView 用于列出所有选择  如:铃声选择 列出所有声音供选择使用  对应于:ListPreference3.  属性结合 用于列出一系列相关属性 如:所有与短消息有关的功能 对应于:PreferenceScreen  该项仅用于界面 故与Preference无关界面 其实 讨论这个 比较鸡肋 大家自己试着运行就一目了然了  所以 觉得还是以步骤为主鉴于PreferenceActivity使用 网络很多 故此略过 为了给自己备份 防止以后用到 大致叙述一下[代码 步骤]1.  PreferenceActivity  界面比较特别 在 res/xml/setting.xml

1. <?xml version="1.0" encoding="utf-8"?>

2. <PreferenceScreen

3. xmlns:android="http://schemas.android.com/apk/res/android">

4. <CheckBoxPreference

5. android:key="autoBack"

6. android:title="自动回复"

7. android:summaryOn="开启"

8. android:summaryOff="关闭"

9. android:defaultValue="true"

10. />

11. 

12. <PreferenceCategory android:title="SMS 助手">

13. <CheckBoxPreference

14. android:key="smsSilence"

15. android:title="静音"

16. android:summaryOn="开启"

17. android:summaryOff="关闭"

18. android:defaultValue="false"

19. />

20. <PreferenceScreen android:title="更多选项">

21. <CheckBoxPreference

22. android:key="cb21"

23. android:title="功能1"

24. android:summaryOn="开启"

25. android:summaryOff="关闭"

26. android:defaultValue="true"

27. />

28. <CheckBoxPreference

29. android:key="cb22"

30. android:title="功能2"

31. android:summaryOn="使用"

32. android:summaryOff="停用"

33. android:defaultValue="true"

34. />

35. <ListPreference

36. android:key="list1"

37. android:title="android forum"

38. android:summary="开发论坛"

39. android:dialogTitle="请选择论坛"

40. android:entries="@array/entries_list_preference"

41. android:entryValues="@array/entriesvalue_list_preference"

42. />

43. <EditTextPreference

44. android:key="et1"

45. android:title="EditTextPreference Sample"

46. android:summary="点击输入"

47. android:dialogTitle="输入设置"

48. android:defaultValue="Hello EditTextPreference"

49. />

50. </PreferenceScreen>

51. </PreferenceCategory>

52. 

53. <PreferenceCategory android:title="其他选项">

54. <RingtonePreference

55. android:key="rt1"

56. android:title="RingtonePreference Sample"

57. android:summary="选择铃声"

58. />

59. </PreferenceCategory>

60. </PreferenceScreen>

复制代码

2. 导入setting.xml

1. addPreferencesFromResource(R.xml.settings);

复制代码

emulator 运行截图:

 

 

点开"更多选项"

具体 请大家自己尝试之3. 其实 关于PreferenceActivity 问题 基本结束了 但是 初次使用 会碰到一些坎坷 现一一讨论4. 监听设定变化问题    普通布局里的监听  比较简单 先通过findViewById()获得目标View  再在其上注册监听器即可但是 PreferenceActivity 并没有提供findViewById()  也就无法监听 那么 怎么做呢?   - 得到SharedPreferences 句柄

1. sp = PreferenceManager.getDefaultSharedPreferences(this);

复制代码

- 在 sp 之上注册改变监听器

1. sp.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener(){

2. 

3. @Override

4. //sharedPreferences:句柄

5. //key: 改变 键值

6. public void onSharedPreferenceChanged(

7. SharedPreferences sharedPreferences, String key) {

8. // TODO Auto-generated method stub

9. 

10. if(key.equals("autoBack")){

11. Boolean autoBack = sharedPreferences.getBoolean("autoBack", false);

12. if(autoBack){

13. Log.d("TAG","autoBack: true!");

14. }

15. else {

16. Log.d("TAG","autoBack: false!");

17. }

18. }

19. }

20. 

21. });

复制代码

5. Preference 异地使用 即:PreferenceActivity 在一个应用程序 而别处应用程序可能也想改变该数据   怎么做呢?- 通过getSharedPreferences()  得到SharedPreferences实例

1. spc = this.getSharedPreferences("com.android.PreferenceActivity.Usage_preferences.xml", MODE_WORLD_READABLE );

复制代码

- 取值

1. Boolean autoBack = spc.getBoolean("autoBack", false);

复制代码

- 赋值

1. public void putValue(String key, Boolean value){

2. spe = spc.edit();

3. spe.putBoolean(key, value);

4. spe.commit();

5. }

复制代码

就这样结束 似乎感觉不爽 所以决定加点料- ListPreference 使用

1. <ListPreference

2. android:key="list1"

3. android:title="android forum"

4. android:summary="开发论坛"

5. android:dialogTitle="请选择论坛"

6. android:entries="@array/entries_list_preference"

7. android:entryValues="@array/entriesvalue_list_preference"

8. />

复制代码

1. <?xml version="1.0" encoding="utf-8"?>

2. <resources>

3. <string-array name="entries_list_preference">

4. <item>www.anddev.org</item>

5. <item>www.eoeandroid.com</item>

6. <item>developer.android.com</item>

7. </string-array>

8. <string-array name="entriesvalue_list_preference">

9. <item>1</item>

10. <item>2</item>

11. <item>3</item>

12. </string-array>

13. </resources>

复制代码

 

EditTextPreference 使用

1. <EditTextPreference

2. android:key="et1"

3. android:title="EditTextPreference Sample"

4. android:summary="点击输入"

5. android:dialogTitle="输入设置"

6. android:defaultValue="Hello EditTextPreference"

7. />

复制代码

 

 

posted @ 2013-06-15 21:48  来福1990627  阅读(265)  评论(0编辑  收藏  举报