我们经常看到应用程序的设置页面,一般用到设置页面时,我们会继承自PreferenceActivity,它实现了SharedPreference,并生成相应的XML文件自动保存用户的设置,在设置页面中,每一个列表项都是一个Preference,如果要实现点击某一项有所反应,就需要实现OnPreferenceChangeListener接口,并使得某一个Preference绑定一个监听器,下面的截图是作者实现的一个设置界面:

实现这个界面的XML文件如下:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory  android:title="我的设置"><!-- 此外,还有一个控件为,ListPreference,单击该控件会弹出一个带ListView的对话框 --><!-- 该控件相当于CheckBox --><CheckBoxPreference android:key="wireless_network"android:title="使用无线网络"android:summary="使用无线网络查看应用程序(例如Google地图)中的位置"/><CheckBoxPreference android:key="gps_satellite_setting"android:title="启用GPS卫星设置"android:summary="定位时,精确到街道级别(取消选择可节约电量)"/>
</PreferenceCategory><PreferenceCategory  android:title="个人信息设置"><CheckBoxPreference android:key="yesno_save_info"android:title="是否保存个人信息"/><!-- 单击该控件会弹出一个带EditText的对话框 --><EditTextPreference android:key="individual_name"android:title="姓名" android:summary="请输入真实姓名"/><!-- 这是一个子设置页面,但是如果如在代码中设置,打开后是黑色的背景,看不到内容 --> <PreferenceScreen android:key="other_individual_msg"android:title="其他个人信息" android:summary="是否工作,手机"><CheckBoxPreference android:key="is_an_employee"android:title="是否工作"/><EditTextPreference android:key="mobile"android:title="手机" android:summary="请输入真实的手机号"/></PreferenceScreen></PreferenceCategory></PreferenceScreen>

其中实现相应的功能,功能的实现代码都有相应的注释:

public class SharedActivity extends PreferenceActivity implements OnPreferenceChangeListener{@SuppressWarnings("deprecation")@Override/**在onCreate方法中需要做一下几点工作*1.修改PreferenceActivity保存数据使用的XML文件的名称,在默认情况下,保存key-value对的XML文件是<package_name>_preferences.xml*在本例中我将这些键值对保存才setting中*2.设置”姓名“列表项是否可用*3.每一个列表项就是一个Preference对象,要实现单击响应,就必须要绑定响应的监听器*/protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//改变PreferenceActivity保存数据使用的XML文件的名称getPreferenceManager().setSharedPreferencesName("setting");//不需要设置布局文件,只需要使用如下的代码装载xml文件即可addPreferencesFromResource(R.xml.activity_shared);Preference individualNamePreference=findPreference("individual_name");//获得指向setting.xml文件的SharedPreference对象SharedPreferences sharedPreferences=individualNamePreference.getSharedPreferences();//设置姓名列表项的SummaryindividualNamePreference.setSummary(sharedPreferences.getString("individual_name", "请输入真实姓名"));Preference mobilePreference=findPreference("mobile");SharedPreferences sharedPreferences2=mobilePreference.getSharedPreferences();mobilePreference.setSummary(sharedPreferences2.getString("mobile", "请输入真实的手机号码"));//设置“姓名”列表项是否可用if(sharedPreferences.getBoolean("yesno_save_info", false)){individualNamePreference.setEnabled(true);}else {individualNamePreference.setEnabled(false);}individualNamePreference.setOnPreferenceChangeListener(this);mobilePreference.setOnPreferenceChangeListener(this);/** 在Preference中设置使用Theme.Light主题,则打开Preference为白色主题, * 当Preference中内嵌有其他PreferenceScreen的时候, * 打开内嵌的PreferenceScreen则屏幕背景为黑色的.* 下面的这个方法实现的是:* 在打开内嵌PreferenceScreen的时候设置其背景色.*/PreferenceScreen s= (PreferenceScreen) findPreference("other_individual_msg");  s.setOnPreferenceClickListener(new OnPreferenceClickListener() {  @Override  public boolean onPreferenceClick(Preference preference) {  PreferenceScreen a = (PreferenceScreen) preference;  a.getDialog().getWindow().  setBackgroundDrawableResource(android.R.drawable.screen_background_light);  return false;  }  }); }@SuppressWarnings("deprecation")@Overridepublic boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,Preference preference) {if("yesno_save_info".equals(preference.getKey())){findPreference("individual_name").setEnabled(!findPreference("individual_name").isEnabled());}// TODO Auto-generated method stubreturn super.onPreferenceTreeClick(preferenceScreen, preference);}/** 必须要实现OnPreferenceChangeListener接口,该回调函数的功能是捕获列表项中的值改变后的情况* @see android.preference.Preference.OnPreferenceChangeListener#onPreferenceChange(android.preference.Preference, java.lang.Object)*/@Overridepublic boolean onPreferenceChange(Preference preference, Object newValue) {// TODO Auto-generated method stubpreference.setSummary(String.valueOf(newValue));//一定要返回true,否则列表项的值不会改变return true;}}

Android开发--详解SharedPreference/PreferenceActivity相关推荐

  1. Android开发详解之App升级程序一点通

    Android开发详解之App升级程序一点通 结束语 UpdateManager.java import java.io.File; import java.io.FileOutputStream; ...

  2. Android开发详解:第4章《UI 控件》

    Android开发详解:第4章<UI 控件> 控件是Android程序设计的基本组成单位,通过使用控件可以高效地开发Android应用程序.所以熟练掌握控件的使用是合理.有效地进行Andr ...

  3. Android开发--详解ContentProvider/Cursor的使用

    ContentProvider是Android四大组件之一,所以如果是自己实现ContentProvider,需要在AndroidManifest.xml文件中进行声明,幸运的是,我们很少需要自己定义 ...

  4. android开发--详解ListView,动态添加,删除Adapter中的数据项

    ListView是Android开发中最常用到的控件之一,所以学习ListView显得非常重要,在本文中,作者继承了BaseAdapter实现了自己的Adapter,在其中实现相应的方法,包括添加,删 ...

  5. Android开发详解:第3章《App UI 设计》

    第3章:App UI设计 3.1:UI设计的相关概念 3.3:布局管理器 3.4:常用APP UI界面设计 3.1:UI设计的相关概念 View View类在Android中可以理解为视图.它占据屏幕 ...

  6. Android开发--详解SAX解析XML文件

    SAX技术字处理XML文件时并不是一次性把XML文件装入内存,而是一边读一边解析,因此,在解析的过程中会有几个步骤需要注意,在这里用一张图来表示解析的步骤: 在本实例中,定义了一个xml文件,其中有若 ...

  7. 《Android游戏开发详解》——第1章,第1.6节函数(在Java中称为“方法”更好)...

    本节书摘来自异步社区<Android游戏开发详解>一书中的第1章,第1.6节函数(在Java中称为"方法"更好),作者 [美]Jonathan S. Harbour,更 ...

  8. JMessage Android 端开发详解

    JMessage Android 端开发详解 目前越来越多的应用会需要集成即时通讯功能,这里就为大家详细讲一下如何通过集成 JMessage 来为你的 App 增加即时通讯功能. 首先,一个最基础的 ...

  9. 《Android游戏开发详解》一2.16 区分类和对象

    本节书摘来异步社区<Android游戏开发详解>一书中的第2章,第2.16节,作者: [美]Jonathan S. Harbour 译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社 ...

最新文章

  1. Netty 之 Zero-copy 的实现(下)
  2. 详解 | Dropout为何能防止过拟合?
  3. 星星模型 维度_用模型“想象”出来的target来训练,可以提高分类的效果!
  4. python中协程与函数的区别_深入浅析python 协程与go协程的区别
  5. java流的应用_Java中I/O流的应用
  6. java jps都卡死,java长时间运行后,jps失效
  7. java编写服务器_java编写一个简单的回射服务器
  8. zynq tcp如何从网口发数据_基于TCP/IP协议的电口通信
  9. python实现特定软件代理_Python针对特定服务定制的代理工具V2.0------(proxyHandler.py)...
  10. 超越SimCSE两个多点,Prompt+对比学习的文本表示新SOTA
  11. java制作管理系统视频_阶段1:手把手快速做一个Java swing mysql学生信息管理系统附带完整源码及视频开发教程【猿来入此自营】...
  12. luogu P2680 运输计划 (二分答案+树上差分)
  13. 365Key今天不能用了,感觉不爽
  14. WordPress中文SEO优化建议
  15. xscan运行xscan_gui.exe无法打开
  16. matlab做信号实验需要安装那些模块_Amesim软件安装过程
  17. spring html导出excel文件,springboot2.1.8使用poi导出数据生成excel(.xlsx)文件
  18. android接入微信登录授权提示{errcode:40125,errmsg:invalid appsecret, view more at 。。。解决办法
  19. 5APMP项目管理:PMP考试备考经验学习方法和模拟考题(1-经验篇)
  20. 数据标注下半场:PLG模式下的增长飞轮丨曼孚科技

热门文章

  1. (转载)Xcode中other linker flags的作用
  2. JSONP 跨域的原理
  3. BZOJ 2592 随机化(伪)
  4. [编程题]字符串最后一个单词的长度
  5. Word VSTO Error:Interop type 'Microsoft.Office.Interop.OneNote.Application' cannot be embedded...
  6. vSphere ESXi命令行使用方法详解
  7. 推荐一个不错的开源在线HTML编辑器
  8. 怎样给RCP程序添加依赖的JAR包
  9. openlayers之style符号化
  10. MySQL数据库的高可用方案总结