zoukankan      html  css  js  c++  java
  • 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. />

    复制代码

     

     

  • 相关阅读:
    Linkerd 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用
    Linkerd 2.10(Step by Step)—多集群通信
    Linkerd 2.10(Step by Step)—使用 Kustomize 自定义 Linkerd 的配置
    Linkerd 2.10(Step by Step)—控制平面调试端点
    Linkerd 2.10(Step by Step)—配置超时
    Linkerd 2.10(Step by Step)—配置重试
    Linkerd 2.10(Step by Step)—配置代理并发
    本地正常运行,线上环境诡异异常原因集合
    Need to invoke method 'xxx' declared on target class 'yyy', but not found in any interface(s) of the exposed proxy type
    alpine 安装常用命令
  • 原文地址:https://www.cnblogs.com/laifu/p/3138063.html
Copyright © 2011-2022 走看看