简介

PreferenceFragment , 展示一系列的Preference条目并且当与用户有交互时,产生的值会自动保存到SharedPreferences中,通过PreferenceManager#getDefaultSharedPreferences(android.content.Context)可以查看对应的SharedPreferences的值。展示的Preferences的风格会随着系统而改变,通过XML文件可以快速的创建Preferences,官方推荐使用Fragment来实现这类功能。

创建XML

Tag 意义
PreferenceScreen 必须作为根节点,代表整个Preferences屏幕
PreferenceCategory 一组Preferences,便于分类
SwitchPreference 两种状态的preference,开关
ListPreference 列表显示Preference, android:entries设置的内容是我们在设置时看到的内容,而android:entryValues就是保存在preferences.xml中的值
CheckBoxPreference 复选框Preference,勾选和不勾选
RingtonePreference Ringtone选择Preference
EditTextPreference 编辑类Preference
MultiSelectListPreference 多选类Preference

常用属性

属性 用法
android:title 标题
android:defaultValue 默认值
android:key SharedPreference中保存值时使用的Key值
android:entries 列表或者多选框的显示内容
android:entryValues 列表或者多选框保存过程中对应的值

代码使用

XML文件

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="无线和网络">
<SwitchPreference
android:defaultValue="false"
android:title="WLAN"
android:key="switch_preference_wlan" />
<SwitchPreference
android:defaultValue="false"
android:title="蓝牙"
android:key="switch_preference_bluetooth" />
<ListPreference
android:defaultValue="1"
android:title="休眠"
android:entries="@array/pref_sleep_interval"
android:entryValues="@array/pref_sleep_interval"
android:key="list_preference_sleep" />
</PreferenceCategory>
<PreferenceCategory android:title="设备"
android:persistent="false"
android:orderingFromXml="false">
<CheckBoxPreference
android:defaultValue="false"
android:title="静音"
android:key="check_box_preference_virate" />
<RingtonePreference
android:defaultValue=""
android:title="铃声"
android:key="ringtone_preference_ringtone" />
</PreferenceCategory>
<PreferenceCategory android:title="隐私和安全">
<EditTextPreference
android:defaultValue="Default value"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="设备名称"
android:key="edit_text_preference_devicename" />
<MultiSelectListPreference
android:title="辅助功能"
android:defaultValue="@array/pref_assit_function"
android:entries="@array/pref_assit_function"
android:entryValues="@array/pref_assit_function"
android:key="multi_select_list_preference_assit" />
</PreferenceCategory>
</PreferenceScreen>

arrays.xml文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
<array name="pref_sleep_interval">
<item>30秒</item>
<item>1分钟</item>
<item>2分钟</item>
<item>5分钟</item>
<item>10分钟</item>
<item>30分钟</item>
</array> <array name="pref_assit_function">
<item>灵犀一指</item>
<item>指关节截屏</item>
<item>通话录音</item>
<item>白科技</item>
<item>黑科技</item>
</array>
</resources>

自定义PreferenceFragment

PreferenceFragment是抽象类,需要自己实现

public class BaseFragment extends PreferenceFragment {

    @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
} @Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
Toast.makeText(getActivity(), preference.toString() + " is Clicked", Toast.LENGTH_LONG).show();
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
}

Activity中使用

BaseFragment baseFragment = new BaseFragment();
FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
transaction.replace(xxxxxx,baseFragment);
transaction.commit();

结果

SharedPreference结果<中文乱码是系统问题>

<Android 基础(三 十)> Fragment (3) ~ PreferenceFragment的更多相关文章

  1. Bootstrap <基础三十二>模态框(Modal)插件

    模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用  ...

  2. Bootstrap <基础三十>Well

    Well 是一种会引起内容凹陷显示或插图效果的容器 <div>.为了创建 Well,只需要简单地把内容放在带有 class .well 的 <div> 中即可.下面的实例演示了 ...

  3. Android基础之使用Fragment控制切换多个页面

    Android官方已经提供了Fragment的各种使用的Demo例子,在我们SDK下面的API Demo里面就包含了Fragment的各种使用例子,需要看Demo的朋友,直接看API Demo那个程序 ...

  4. <Android基础>(三) UI开发 Part 3 RecyclerView

    RecyclerView 1)RecyclerView的基本用法 2)横向滚动和瀑布流滚动 3)注册点击事件 3.6 强大的滚动控件 RecyclerView ListView缺点: 1.不使用技巧优 ...

  5. Android中GridView拖拽的效果【android进化三十六】

      最 近看到联想,摩托罗拉等,手机launcher中有个效果,进入mainmenu后,里面的应用程序的图标可以拖来拖去,所以我也参照网上给的代码,写了 一个例子.还是很有趣的,实现的流畅度没有人家的 ...

  6. <Android基础>(三) UI开发 Part 2 ListView

    ListView 1)ListView的简单用法 2)定制ListView界面 3)提升ListView的运行效率 4)ListView的点击事件 3.5 ListView 3.5.1 ListVie ...

  7. Android基础之使用Fragment控制切换多个页面[转]

    Android官方已经提供了Fragment的各种使用的Demo例子,在我们SDK下面的API Demo里面就包含了Fragment的各种使用例子,需要看Demo的朋友,直接看API Demo那个程序 ...

  8. Android笔记三十四.Service综合实例二

    综合实例2:client訪问远程Service服务 实现:通过一个button来获取远程Service的状态,并显示在两个文本框中. 思路:如果A应用须要与B应用进行通信,调用B应用中的getName ...

  9. <Android 基础(十九)> CoordinatorLayout

    介绍 CoordinatorLayout,中文翻译,协调布局,顾名思义,此布局中的子View之间,子View与父布局之间应该是可以协调工作的,如何协调,Behavior. 今天看下Android St ...

  10. <Android 基础(十八)> XLIFF

    介绍 XLIFF ,XML Localization Interchange File Format,XML本地化数据交换格式. 实际使用 1.布局文件 activity_main.xml <? ...

随机推荐

  1. 弹出AlertDialog的时候报You need to use a Theme.AppCompat theme (or descendant) with this activity错误

    今天遇到一个bug,用百度地图的时候,我对上面的标注设置了点击监听,设置的相应的反应是弹出一个AlertDialog 记录一解决bug的历程 但是Dialog却没有弹出来,一看AS下面,报了这错,起初 ...

  2. Tornado初探

    Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了能有效 ...

  3. PyCharm下载与激活

    1.集成开发环境(IDE:Integrated Development Environment)PyCharm下载地址:https://www.jetbrains.com/pycharm/downlo ...

  4. scala中的一些特殊符号的意义

    1.作为“通配符”,类似Java中的*.如import scala.math._ 2.:_*作为一个整体,告诉编译器你希望将某个参数当作参数序列处理!例如val s = sum(1 to 5:_*)就 ...

  5. MapReduce中的倒排索引

    0.倒排索引资料: http://blog.csdn.net/pzasdq/article/details/51442856 1.三个日志源文件: a.txt hello tom hello jerr ...

  6. @JSONField注解的使用

    FastJson中的注解@JSONField,一般作用在get/set方法上面,常用的使用场景有下面三个: 修改和json字符串的字段映射[name] 格式化数据[format] 过滤掉不需要序列化的 ...

  7. Android _关于fragment切换重新加载的解决分享给大家

    在项目中需要进行Fragment的切换,一直都是用replace()方法来替换Fragment但是,这样会有一个问题 ,应该很多朋友都遇到过:每次切换的时候,Fragment都会重新实例化,也就是运行 ...

  8. Java语法糖之内部类

    例1: class Outer { public void md1(final int a) { final int b = 1; class LocalA { int c = a; } class ...

  9. 【原】ATI显卡设置双显示器

    Ubuntu 12.04系统下加上增加一个显示器后,一直只能镜像显示,或只能用笔记本的屏幕显示,另一个屏幕无法使用了,上网搜索了一下解决办法,通过下面的方法可以解决问题: 编辑/etc/X11/xor ...

  10. Vue笔记:使用 mock.js 模拟数据

    在我们的项目实际开发过程中,后端的接口往往是较晚才会提供出来,并且还要写接口文档,如果前端的开发都要等到接口开发完成才开始就非常影响项目整体开发进度了,mock.js 的出现使前后端分离并行开发成为可 ...