Android开发——设置界面的建立

前言:

最近忙着搞项目,可贵有时间,便来整理搞项目中学习到的知识java

使用以前,先介绍一下android这种的五种数据储存方式,分别为文件储存,SharePrefence,SQL,使用ContentProvider存储数据,网络存储数据,其中,SharePrefence是一个轻量的储存,主要是用来储存app的相关设置,设置界面就是使用的这种储存方式android

想要深刻了解的请看下面的参考博文浏览器

Android 数据存储五种方式使用与总结 - CSDN博客

使用:

按照以往,咱们建立界面的时候,是用的xml布局+activity文件,设置界面也是与之相似网络

第一步:建立xml文件夹

切换到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

对于Android 3.0如下的应用,咱们须要在 Activity 中显示设置,应当扩展 PreferenceActivity 类。这是传统 Activity 类的扩展,该类根据 Preference 对象的层次结构显示设置列表。当用户进行更改时,PreferenceActivity 会自动保留与每一个 Preference 相关的设置。对 Android 3.0 及 更高版本系统的应用,则应改成使用 PreferenceFragment。与仅使用上述 Activity 相比,不管在构建何种 Activity,Fragment均可为应用提供一个更加灵活的体系结构。
如今来讲,最低版本都是android4.0了,咱们就直接抛弃之前的方法,使用Fragment便可

新建一个Fragment

因为咱们这个是设置界面,因此不须要想正常的fragment那样使用,因此将三个选项都取消

首先咱们要修改fragment,使其继承PreferenceFragment

以后,在onCreate方法中添加一行代码,使用addPreferenceFromResource方法绑定以前的设置界面的xml

若是以前有使用过fragment的,应该知道咱们只能在onViewCreated方法中来找控件

这里经过key来找到设置界面的控件

调用静态方法getDefaultSharedPreference来得到sharePreference,以后经过get方法来获取以前保存的数值

这里须要说起一下,本来的SharedPreference中能够保存int boolean String等类型的数据,可是,若是像咱们这里使用设置来保存app设置的相关数据,sharedPreference只有两种数据,一种是String,另一种则是boolean,若是想要int,须要将得到的String转换为int类型

 

 

找到控件以后,咱们能够调用相关的方法为其设置监听器来实现相关的功能

第四步:动态添加在framelayout中

咱们须要新建一个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定义的控件相同的使用方法)

相关文章
相关标签/搜索