最近忙着搞项目,可贵有时间,便来整理搞项目中学习到的知识java
使用以前,先介绍一下android这种的五种数据储存方式,分别为文件储存,SharePrefence,SQL,使用ContentProvider存储数据,网络存储数据,其中,SharePrefence是一个轻量的储存,主要是用来储存app的相关设置,设置界面就是使用的这种储存方式android
想要深刻了解的请看下面的参考博文浏览器
按照以往,咱们建立界面的时候,是用的xml布局+activity文件,设置界面也是与之相似网络
切换到Project模式,新建一个xml文件夹,用来放设置界面的布局文件app
在xml文件夹中新建一个xml文件ide
命名的话以pref_xxx形式,官方的命名规范就是以pref为前缀命名的布局
打开xml文件,能够发现与咱们以前写布局文件是同样的,有design模式和text模式,这里咱们能够看到有七种能够选择,我只讲解EditTextPreference和SwitichPreference学习
须要详解的能够参考这一篇Android:详解如何建立Google风格的SettingsActivity - 简书url
结合上面的两张图片,我讲解一下相关的属性spa
defaultValue是默认值,
key相似于咱们写layout文件中定义的id,咱们能够经过id找到控件,一样的,在这里,咱们也能够经过key能够找到控件
summary就是开通会员下面的那一行字
title就是标题,也就是开通会员
EditViewPreference 这个是封装了EditView的一个控件,当咱们点击的时候,会弹出一个对话框让咱们输入数据,当咱们输入数据以后,数据就会保存在SharePreference之中
同理,switch是一个开关,点击的时候会将true或者false保存在SharePreference中
若是咱们只是想弄一个选项,点击会打开一个浏览器,上面的控件均不合适,咱们怎么办呢?不知道你注意到没有,最外层使用的是PreferenceScreen
咱们能够像上图之中这样使用PreferenceScreen,以后在java代码之中能够为它设置监听器,跳转到浏览器
key能够定义在sting.xml中,固然,也能够直接设置
因为咱们这个是设置界面,因此不须要想正常的fragment那样使用,因此将三个选项都取消
首先咱们要修改fragment,使其继承PreferenceFragment
以后,在onCreate方法中添加一行代码,使用addPreferenceFromResource方法绑定以前的设置界面的xml
若是以前有使用过fragment的,应该知道咱们只能在onViewCreated方法中来找控件
这里经过key来找到设置界面的控件
调用静态方法getDefaultSharedPreference来得到sharePreference,以后经过get方法来获取以前保存的数值
这里须要说起一下,本来的SharedPreference中能够保存int boolean String等类型的数据,可是,若是像咱们这里使用设置来保存app设置的相关数据,sharedPreference只有两种数据,一种是String,另一种则是boolean,若是想要int,须要将得到的String转换为int类型
找到控件以后,咱们能够调用相关的方法为其设置监听器来实现相关的功能
咱们须要新建一个activity文件,其布局须要一个framelayout
以后,咱们经过Fragment的方法动态添加设置fragment
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.add(R.id.setting_framlayout,settingFragment).commit();
学过fragment的话,应该知道,咱们使用Fragment的时候,有两个包给咱们选择,一个是v4包,另一个则是app包,使用v4包的那个fragment能够得到更好的兼容性(低版本)
因此这里须要注意,使用的fragment是app包的Fragment,刚开始我使用的v4包,一直出错,查找缘由以后,发现了,以前settingFragment继承的是PreferenceFragment,而PreferenceFragment继承的则是app包下的Fragment
经过setEnable方法(对象为控件)能够禁用控件(若是设置密码锁的话能够使用此方法)
能够将Preference转型为相关的对象,如Preference能够转为EditTextPreference,或者能够转为SwitchPreference,以后就能够调用相关的对象的方法(与原来的在xml定义的控件相同的使用方法)