安卓之PreferenceActivity分享
PerferenceActivity是什么,看下面的截图:
Android的系统截图
乐手设置截图
好了,我们看到Android系统本身就大量用到了PreferenceActivity来对系统进行信息配置和管理,那么它是怎么保存数据的呢,如何创建PrefenceActivity的呢,更关键是怎样触发相应事件的呢。
PreferenceActivity设置的值。
第二个问题:。如何创建一个PreferenceActivity其实Eclipse中提供了相应的创建工具,和创建布局是基本相同的步骤如下:
创建的Android项目,并添加一个Android的XML文件。注意,这次选择的不是版式,而是偏好,而且注意文件夹路径是的res / xml的。
添加完成之后,在res/xml/下打开添加的preference.xml文件。可以看到Android也为我们提供两种编辑模式,可视化的结构设计及xml源码设计。推荐使用structure进行创建。如图所示:
下面我们看看PrefeneceActivity都提供了哪几种元素可供使用。点击Add按钮,在打开的新窗口中可以看到以下几项:
CheckBoxPreference:复选框选择项,对应的值的TURE或FLASE如图:
EditTextPreference:输入编辑框,值为字符串类型,会弹出对话框供输入。
ListPreference:列表选择,弹出对话框供选择。
偏好:只进行文本显示,需要与其他进行组合使用。
PreferenceCategory:用于分组效果如下:
PreferenceScreen:PreferenceActivity的根元素,必须为它。
RingtonePreference:系统玲声选择。
OK,Preferenc的基本元素介绍完毕,下一节将使用它们创建一个完整的Preference并进行显示。
-------------------------------------------------- -----------------------------
分析乐手Setting,第一部分为“我的位置”,包括“使用无线网线”和“使用GPS”两个部分,而且都是CheckBox,根据上节学习,应该包括一个PreferenceCategory和两个CheckBoxPreference。
XML代码:
<PreferenceCategory的android:标题=“ 我的位置 “机器人:键=” set_local “>
<CheckBoxPreference 机器人:标题=“ 使用无线网络 “机器人:设置defaultValue =”真“> </ CheckBoxPreference> <CheckBoxPreference 机器人:标题=“ 使用全球定位系统“> </ CheckBoxPreference> </ PreferenceCategory>
以上代码当然也可以用的Android提供的IDE工具直接生成视频结构如下:
PreferenceCategory属性分析:
标题:显示的标题
(以下相同)。
CheckBoxPreference属性分析:
键:唯一标识。
标题:显示标题(大字体显示)
摘要:副标题(小字体显示)
设置defaultValue:默认值(当然,此处只能是真或假的了)
Preference.xml的第二部分为“无线和网络设置”,此部分包括的内容比较多,也稍微复杂,一步一步来分析。
XML代码:
< CheckBoxPreference android : key = "apply_fly"
android : summary = "禁用所有无线连接" android : title = "飞行模式" >
</ CheckBoxPreference >
< CheckBoxPreference android : key = "apply_internet"
android : summary = "禁用通过USB共享Internet连接" android : title = "Internet共享" >
</ CheckBoxPreference >
< CheckBoxPreference android : key = "apply_wifi"
android : summary = "打开Wi-Fi" android : title = "Wi-Fi" >
</ CheckBoxPreference >
< Preference android : summary = "设置和管理无线接入点" android : title = "Wi-Fi设置"
android : dependency = "apply_wifi" android : key = "wifi_setting" >
</ Preference >
< CheckBoxPreference android : key = "apply_bluetooth"
android : summary = "启用蓝牙" android : title = "蓝牙" >
</ CheckBoxPreference >
< Preference android : summary = "管理连接、设备设备名称和可检测性"
android : title = "蓝牙设置" android : dependency = "apply_bluetooth"
android : key = "bluetooth_setting" >
</ Preference >
< EditTextPreference android : key = "number_edit"
android : title = "输入电话号码" >
</ EditTextPreference >
< ListPreference android : title = "部门设置" android : entries = "@array/department"
android : entryValues = "@array/department_value" android : dialogTitle = "选择部门"
android : key = "depart_value" >
</ ListPreference >
< RingtonePreference android : ringtoneType = "all" android : title = "玲聲" android : showDefault = "true" android : key = "ring_key" android : showSilent ="true" >
</ RingtonePreference >
</ PreferenceCategory >
对应的结构图:
第二部分中前三个都为CheckBoxPreference,不心多说,从< Preference android : key = "bluetooth_setting"/>开始。
偏好属性分析:
键:唯一标识。
标题:显示标题(大字体显示)
摘要:副标题(小字体显示)
CheckPreference值为真时,优先股则为可用,否则为不可用。
EditTextPreperence属性分析:
键:唯一标识。
标题:显示标题(大字体显示)
ListPreference属性分析:
键:唯一标识。
标题:显示标题(大字体显示)
dialogTitle:弹出对话框的标题
条目:列表中显示的值为一个数组,通读通过资源文件进行设置。
entryValues:列表中实际保存的值,也entries对应。为一个数组,通读通过资源文件进行设置。以下代码显示的是arrays.xml文件中内容:
< resources >
< string - array name = "department" >
< item >综合部</ item >
< item >行政部</ item >
< item >外贸部</ item >
</ string -array >
< string - array name = "department_value" >
< item > 001 </ item >
< item > 002 </ item >
< item > 003 </ item >
</ string -array >
</ resources >
RingtonePreference:玲声(暂时没有用到过),暂时略过。
OK,Preference.xml内容已经分析完毕,属性都大致相同,相信亲自动力一试也就那么回事。那么如何把Preference.xml中内容展现出来呢?
Layout是通过继续自Activity的类来进行显示的,前面提到过,PreferenceActivity是专门用于显示preference的,所以只要创建一个继承自PreferenceActivity类即可。代码如下:
@覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
/ /所的的值将会自动保存到SharePreferences
addPreferencesFromResource(R.xml.preference);
}
}
接下来就是运行程序,显示劳动成果。至此,工作已经完成大半,所有的值都会保存到SharedPreferences中,我们也可以读取到保存的结果。
还有一个重要的问题,就是如何响应PreferenceActivity的操作。其实只要重写PreferenceActivity的onPreferenceTreeClick的方法就可以了,通过参数preference来判断是对那一个元素进行的,并根据需要进行操作。
优先级preference){ 返回假 ; }
获取配置信息为了方便的获取配置信息,我们可以在PreferenceActivity里添加一些pulbic方法来公开配置信息的访问。/ ** *获取是否播放声音* / 公共静态布尔playSounds(上下文上下文){ 返回PreferenceManager.getDefaultSharedPreferences( 。上下文)getBoolean(天籁,SOUNDS_DEFAULT); } / ** *设置播放的声音 * @参数上下文上下文 * @参数值是否播放* / 公共静态无效setPlaySounds(上下文语境,布尔值){ PreferenceManager.getDefaultSharedPreferences(上下文) 。编辑()putBoolean(天籁,价值)提交(); } / ** *获取警告时间 * @参数上下文上下文 * @返回警告时间秒* / 公共静态诠释getWarningTime(上下文上下文){ 字符串 E) { setWarningTime(上下文,WARNING_TIME_DEFAULT);返回WARNING_TIME_DEFAULT; } } / ** *设置警告时间 * @参数上下文上下文 * @参数warningTime警告时间* / 公共静态无效setWarningTime(上下文语境,诠释warningTime){PreferenceManager.getDefaultSharedPreferences 。(上下文)编辑()putString(WARNING_TIME,Integer.toString(warningTime))提交(); } / ** *参加人数无限制 * @参数上下文 * @返回* / 公共静态布尔allowUnlimitedParticipants(上下文语境) { 返回。PreferenceManager.getDefaultSharedPreferences(上下文)getBoolean(UNLIMITED_PARTICIPANTS,UNLIMITED_PARTICIPANTS_DEFAULT); } 公共静态无效setAllowUnlimitedParticipants(上下文语境,布尔值){ 。PreferenceManager.getDefaultSharedPreferences(上下文)编辑()putBoolean(UNLIMITED_PARTICIPANTS,值)提交() ; } / ** * 上下文){ 返回PreferenceManager.getDefaultSharedPreferences(上下文)getBoolean(VARIABLE_MEETING_LENGTH,VARIABLE_MEETING_LENGTH_DEFAULT); } 公共静态无效setAllowVariableMeetingLength(上下文语境,布尔值){ 。PreferenceManager.getDefaultSharedPreferences(上下文)编辑()putBoolean(VARIABLE_MEETING_LENGTH,价值)提交(); } getDefaultSharedPreferences(上下文 commit()方法。
当其他地方需要使用配置时,可以直接调用setting.getXXX()方法来获取配置信息。
Preferencescreen中启动活动例如wireless_setting.xml中有如下片段<PreferenceScreen 布尔onPreferenceTreeClick(PreferenceScreen preferenceScreen,优先级preference){ 如果((偏好== mAirplaneModePreference)&& (Boolean.parseBoolean( SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE)))){ / /在ECM模式下启动ECM应用程序对话框 startActivityForResult( 新意图( TelephonyIntents.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS,空), REQUEST_CODE_EXIT_ECM); 返回true; } 其他{ / /让意图的偏好管理器来启动 的回报 performClick(PreferenceScreen preferenceScreen){ 如果{(ISENABLED()!) 回报; } 的onClick(); 如果(mOnClickListener = NULL && mOnClickListener.onPreferenceClick(这)){ 回报; } PreferenceManager preferenceManager = getPreferenceManager(); 如果(preferenceManager! = NULL){ PreferenceManager.OnPreferenceTreeClickListener监听器= preferenceManager getOnPreferenceTreeClickListener。(); 如果(preferenceScreen = NULL &&监听器= NULL! && listener.onPreferenceTreeClick(preferenceScreen,这)){ 回报; } } !如果(mIntent = NULL){ 上下文上下文= 屏幕共享出来
<activity android:name=".UserPreferences" android:label="Earthquake Preferences">
一是xml里面是否设置正确,第二是调用该xml的java类是否在onPreferenceTreeClick这个函数需要返回false
安卓之PreferenceActivity分享的更多相关文章
- 在Unity3D项目中接入ShareSDK实现安卓平台微信分享功能(可使用ShareSDK默认UI或自定义UI)
最近公司的大厅要重做,我协助主程一起制作新大厅和新框架,前面制作的编辑器也派上了用场.等全部功能做完后我会再写一个复盘,这两天主程在忙于写热更新的功能,所以把接入分享SDK功能的任务交给了我,Shar ...
- 基于python+appium+yaml安卓UI自动化测试分享
结构介绍 之前分享过一篇安卓UI测试,但是没有实现数据与代码分离,后期维护成本较高,所以最近抽空优化了一下.不想看文章得可以直接去Github,欢迎拍砖大致结构如下: 结构.png testyam ...
- 【Bugly安卓开发干货分享】Android APP 快速 Pad 化实现
项目背景 采用最新版本手机 APP(之后称为 MyApp)代码,实现其 Pad 化,为平板和大屏手机用户提供更好的体验.为实现 MyApp 的 Pad 化工作,需要我们首先来了解一下 MyApp 项目 ...
- python+appium+yaml安卓UI自动化测试分享
一.实现数据与代码分离,维护成本较低,先看看自动化结构,大体如下: testyaml管理用例,实现数据与代码分离,一个模块一个文件夹 public 存放公共文件,如读取配置文件.启动appium服务. ...
- Vue微信自定义分享时安卓系统config:ok,ios系统config:invalid signature签名错误,或者安卓和ios二次分享时均config:ok但是分享无效的解决办法
简述需求:要求指定页面可以进行微信自定义分享(自定义标题,描述,图片,链接),剩下的页面隐藏所有基础接口.二次分享依然可以正常使用,切换至其他页面也可以正常进行自定义分享. 这两天在做微信自定义分享的 ...
- 微信分享—ios和安卓机制居然不一样!
实际项目中,在做微信分享追踪的时候,遇到了一个百思不得其解的问题. 在加入了用户分享追踪功能之后,页面已经加载完成的情况下,安卓分享功能没有任何问题,ios却总是分享失败. 关于ios和安卓设备的差 ...
- vue项目中关于微信分享的坑,以及安卓和ios获取location.href不同的处理
最近做vue项目的微信公众号项目,涉及到微信分享,记录一下心得,以备后用,vue路由用的是hash模式: 该项目只是公众号里面的h5链接,不需要获取code获取access_token的票据,因此前端 ...
- 安卓应用使用QQ登录的申请流程
“QQ互联”是腾讯为第三方网站.媒体.终端提供的开放平台.QQ互联拥有8个组件,提供诸如分享.登陆.like.qq提醒等能力.开发者使用QQ帐号登陆组件可以降低了用户的注册门槛,减少注册环节的用户流失 ...
- Android微信登录、分享、支付
转载需要著名出处: http://blog.csdn.net/lowprofile_coding/article/details/78004224 之前写过微信登录分享支付第一版: http://bl ...
随机推荐
- 为什么 把单一元素的数组放在一个struct的尾端问题
问题摘自<深度探究c++对象模型>: struct mumble { /* stuff */ char pc[ 1 ];};[sizeof(mumble)是一个字节 .pc则代表的是指向这 ...
- ios @property
参考资料 http://blog.csdn.net/pingchangtan367/article/details/14000315 http://blog.csdn.net/xdrt81y/arti ...
- C#字符串常见操作总结
string类常用的方法和总结小记
- L3-003. 社交集群
L3-003. 社交集群 题目链接:https://www.patest.cn/contests/gplt/L3-003 查并集 与L2-007(家庭房产)类似,都是采用了并查集的算法,相对来说这题处 ...
- JEMETER 录制
两种方式: 第一种:badboy工具录制,导入jemeter脚本,导入jemeter.目测支持IE 第二种:代理服务器的方式 1.
- 复习i++和++j
一,新建一个Default.aspx页面 在Default.aspx.cs
- Animate.css让添加CSS动画像喝水一样容易
在这个年代,你要是不懂一点点css3的知识,你都不好意思说你是个美工.美你妹啊,请叫我前端工程师好不好.呃..好吧,攻城尸...呵呵,作为一个攻城尸,没有点高端大气上档次的东西怎么能行呢,那么css3 ...
- tomcat Server.xml Context配置问题
有时候需要在tomcat里面做特殊的配置,来进行访问: 例如你的程序 名字是hello端口是80 这时候你要访问你的程序 就要用 localhost/hello 来访问了. 但是怎么直接用 loca ...
- 关于Unity项目中创建项目遇到的一些问题
1.Unity调用Android的方法默认不是在UI线程执行,所以在Android上写一些页面的重绘的方法,让Unity去调用时,注意要在Android中添加对应的runOnUiThread才可以: ...
- 抓取网页中数据 -----51book中城市码
================== 获取网页中span标签里面的t_id的值 public function getpreg(){ $www = 'http://monkey.test.tripb. ...