PreferenceActivity 全接触

PreferenceActivity 全接触br PreferenceAc nbsp br nbsp br 为了引入这个概率首先从需求说起即 现有某 Activity 专门用于手机属性设置那么应该如何做呢 br nbsp br 根据已学知识很快一个念头闪过即 Activity Preference 组合前者用于界面构建后者用于设置数据存放 nbsp 其实这是正确的但是这会比较繁琐因为每个设置选项都要建立与其对应的 Preferencebr nbsp br 所以 nbsp 现在有更好的选择了那就是本文的主角

PreferenceActivity

 

 

为了引入这个概率 首先从需求说起 即:现有某Activity专门用于手机属性设置 那么应该如何做呢?

 

根据已学知识 很快一个念头闪过 即:Activity + Preference 组合 前者用于界面构建 后者用于设置数据存放  其实 这是正确的 但是 这会比较繁琐 因为 每个设置选项 都要建立与其对应的Preference

 

所以  现在有更好的选择了 那就是本文的主角:PreferenceActivity

 

 

从名字应该可以看出 其实 Activity 与 Perference 的混合物

 

 

 

 

还是从需求说起  常见属性设定  有哪几种方式:

 

1. CheckBox  用于 确定/取消  某项功能    如:是否静音   对应于:CheckBoxPreference   其在Preference 有一个选项与其自动绑定 下同

 

 

2.  ListView 用于列出所有选择  如:铃声选择 列出所有声音供选择使用  对应于:ListPreference

 

 

3.  属性结合 用于列出一系列相关属性 如:所有与短消息有关的功能 对应于:PreferenceScreen  该项仅用于界面 故与Preference无关

 

 

 

界面 其实 讨论这个 比较鸡肋 大家自己试着运行就一目了然了  所以 觉得还是以步骤为主

 

 

鉴于PreferenceActivity使用 网络很多 故此略过 为了给自己备份 防止以后用到 大致叙述一下

 

[代码 步骤]

 

1.  PreferenceActivity  界面比较特别 在 res/xml/setting.xml

 

Java代码
复制代码

  1. “1.0” encoding=“utf-8”?>   
  2.  xmlns:android=“http://schemas.android.com/apk/res/android”>   
  3.     
  4.             android:key=“autoBack”  
  5.             android:title=“自动回复”  
  6.             android:summaryOn=“开启”  
  7.             android:summaryOff=“关闭”  
  8.             android:defaultValue=“true”  
  9.         />   
  10.            
  11.      “SMS 助手”>   
  12.         
  13.                 android:key=“smsSilence”  
  14.                 android:title=“静音”  
  15.                 android:summaryOn=“开启”  
  16.                 android:summaryOff=“关闭”  
  17.                 android:defaultValue=“false”  
  18.             />   
  19.          “更多选项”>   
  20.             
  21.                 android:key=“cb21”  
  22.                 android:title=“功能1”  
  23.                 android:summaryOn=“开启”  
  24.                 android:summaryOff=“关闭”  
  25.                 android:defaultValue=“true”  
  26.             />   
  27.             
  28.                 android:key=“cb22”  
  29.                 android:title=“功能2”  
  30.                 android:summaryOn=“使用”  
  31.                 android:summaryOff=“停用”  
  32.                 android:defaultValue=“true”  
  33.             />   
  34.         
  35.             android:key=“list1”  
  36.             android:title=“android forum”  
  37.             android:summary=“开发论坛”  
  38.             android:dialogTitle=“请选择论坛”  
  39.             android:entries=“@array/entries_list_preference”  
  40.             android:entryValues=“@array/entriesvalue_list_preference”  
  41.         />   
  42.         
  43.         android:key=“et1”  
  44.         android:title=“EditTextPreference Sample”  
  45.         android:summary=“点击输入”  
  46.         android:dialogTitle=“输入设置”  
  47.         android:defaultValue=“Hello EditTextPreference”  
  48.         />   
  49.            
  50.        
  51.        
  52.      “其他选项”>   
  53.     
  54.         android:key=“rt1”  
  55.         android:title=“RingtonePreference Sample”  
  56.         android:summary=“选择铃声”  
  57.     />   
  58.        
  59.   
 
   
   
    
    
     
     
      
      
      
      
     
    
    
     
    
  

 

 

2. 导入setting.xml

 

Java代码
复制代码

  1. addPreferencesFromResource(R.xml.settings);  
addPreferencesFromResource(R.xml.settings);

 

  emulator 运行截图:

 

   PreferenceActivity 全接触

 

点开”更多选项”

 

PreferenceActivity 全接触 

 

 

具体 请大家自己尝试之

 

 

 

3. 其实 关于PreferenceActivity 问题 基本结束了 但是 初次使用 会碰到一些坎坷 现一一讨论

 

 

4. 监听设定变化问题    普通布局里的监听  比较简单 先通过findViewById()获得目标View  再在其上注册监听器即可

 

但是 PreferenceActivity 并没有提供findViewById()  也就无法监听 那么 怎么做呢?  

 

– 得到SharedPreferences 句柄

 

Java代码
复制代码

  1. sp = PreferenceManager.getDefaultSharedPreferences(this);  
sp = PreferenceManager.getDefaultSharedPreferences(this);

 

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

 

Java代码
复制代码

  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.             });  
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实例

 

Java代码
复制代码

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

 

– 取值

 

Java代码
复制代码

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

 

– 赋值

 

Java代码
复制代码

  1. public void putValue(String key, Boolean value){   
  2.         spe = spc.edit();   
  3.         spe.putBoolean(key, value);   
  4.         spe.commit();   
  5.     }  
public void putValue(String key, Boolean value){ spe = spc.edit(); spe.putBoolean(key, value); spe.commit(); }

 

 

 

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

 

 

– ListPreference 使用

 

Java代码
复制代码

  1.             android:key=“list1”  
  2.             android:title=“android forum”  
  3.             android:summary=“开发论坛”  
  4.             android:dialogTitle=“请选择论坛”  
  5.             android:entries=“@array/entries_list_preference”  
  6.             android:entryValues=“@array/entriesvalue_list_preference”  
  7.         />  
 
  

 

PreferenceActivity 全接触

 

 

 

– EditTextPreference 使用

 

Java代码
复制代码


  1.         android:key=“et1”  
  2.         android:title=“EditTextPreference Sample”  
  3.         android:summary=“点击输入”  
  4.         android:dialogTitle=“输入设置”  
  5.         android:defaultValue=“Hello EditTextPreference”  
  6.         />  
 
  

 

PreferenceActivity 全接触

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/177259.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午7:56
下一篇 2026年3月26日 下午7:56


相关推荐

  • 因子分析模型 – 因子分析法原理与代码实现 -(Python,R)

    因子分析模型 – 因子分析法原理与代码实现 -(Python,R)因子分析基本思想和主成分分析相似 首先从原理上说 主成分分析是试图寻找原有自变量的一个线性组合 取出对线性关系影响较大的原始数据 作为主要成分 因子分析 是假设所有的自变量可以通过若干个因子 中间量 被观察到 什么意思呢 举个例子 比如一个学生的考试成绩 语文 80 数学 95 英语 79 物理 97 化学 94 那么我们认为这个学生理性思维较强 语言组织能力较弱 其中理性思维和语

    2026年3月16日
    3
  • transition属性值

    transition属性值一、transition-property:transition-property是用来指定当元素其中一个属性改变时执行transition效果,其主要有以下几个值:none(没有属性改变);all(所有属性改变)这个也是其默认值;indent(元素属性名)。当其值为none时,transition马上停止执行,当指定为all时,则元素产生任何属性值变化时都将执行transition效果,id…

    2025年7月4日
    2
  • “全栈”工程师 请不要随意去做

    “全栈”工程师 请不要随意去做今天我来给大家说说 全栈工程师 的事儿 写这篇文的背景原因 很简单就是最近越来越多的人想做 全栈工程师 他们的目标就是全栈 他们才入行短短 1 2 年 甚至刚从培训班出来 我的目标是做全栈 我啥都要学会 啥都会写 这样我就是大牛了 可以挣大钱 就算创业 我也不用招那么多人 一个人搞定一个产品 融资上市 CEO 白富美 balabala 我给他的回复是 去你 xx 的

    2026年3月18日
    2
  • idea-2021.12.13的激活码(JetBrains全家桶)

    (idea-2021.12.13的激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/ide…

    2022年3月30日
    119
  • 解放双手!Cursor一键接管Chrome的MCP神器

    解放双手!Cursor一键接管Chrome的MCP神器

    2026年3月16日
    2
  • 移动亲情网有漫游费吗_北京移动和家庭套餐介绍

    移动亲情网有漫游费吗_北京移动和家庭套餐介绍为进一步满足客户国内长途及国内漫游通话需求,中国移动北京公司将于近期推出长漫亲情省业务,现就相关事宜通知如下:  一、推出时间  2009年4月18日0时  二、目标客户  动感地带、神州行家园卡  三、具体内容  月功能费1元,客户可指定除北京外国内任一省、自治区或直辖市为亲情省(不含港澳台),客户在北京向亲情省拨打长途每分钟0.19元;客户漫游至亲情省拨打国内电话(不含港澳台)、接听电话每分钟

    2022年10月7日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号