preference的用法 java_Preference 使用详解
阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android
本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:
Perference 简介
Perference 使用方法
使用XML定义Preference
使用Fragment 定义Preference
实现效果
Preference 在Android 中重要的控件之一,比如 Settings 模块大部分都是通过Preference 实现的,本章将研究preference 使用方法
1.Preference 简介
Preference 继承关系
java.lang.Object
↳ android.preference.Preference
Preference 常用于APP设置模块,比如Android 系统中的Settings 模块,它可以默认把我们的数据保存在SharePreference中。
键值对(key-values) 获取方法同 SharePreference
SharedPreferences mSp = PreferenceManager.getDefaultSharedPreferences(this);
String favPhone = mSp.getString(PREF_LISTPHONE, "MI");
Preference 数据保存
Preference通过key-values 键值对的形式保存。
保存路径如下:
/data/data/包名/shared_prefs/包名_preferences.xml
2. Perference 使用方法
一般在XML文件夹中创建xml文件来对Settings进行布局,布局文件中通常使用PreferenceScreen容器,PreferenceScreen包含多个 Preference控件,PreferenceCategory可以设置分类标题。
常用Preference控件如下:
PreferenceScreen
CheckBoxPreference
EditTextPreference
ListPreference
PreferenceCategory
RingtonePreference.
上面控件等同Layout布局中的View,PreferenceScreen 等同Layout布局中的ViewGroup。在Android 3.0之前需要继承PreferenceActivity(此方法不是太推荐使用,已被启用),3.0之后更高版本,则需要继承Activity,使用Fragment控制布局,然后实现不同控件的处理事件。
Perference常用使用方法如下两种:
使用XML定义Preference
使用Fragment 定义Preference
3. 使用XML定义Preference
此方法有点过时,不太建议使用,但目前还可以用。
其使用方法如下:
将XML 文件保存在res/xml/目录中 例如:preferences.xml
继承PreferenceActivity在onCreate方法中直接调用addPreferencesFromResource(R.xml.preference);添加布局
点击事件处理setOnPreferenceClickListener,内容发生改变事件处理 setOnPreferenceChangeListener
Preference使用案例如下:
res /xml /preferences.xml
android:key="about_phone"
android:summary="@string/pref_about_phone_sum"
android:title="@string/pref_about_phone_tittle" />
android:key="sw_perference"
android:summary="@string/pref_about_phone_sum"
android:title="@string/pref_about_phone_tittle" />
android:key="pref_ring"
android:summary="@string/pref_ringtone_tittle"
android:title="@string/pref_ringtone_sum" />
android:defaultValue="true"
android:icon="@null"
android:key="pref_blue"
android:summary="@string/preference_blue_sum"
android:title="@string/preference_blue_tittle"
android:widgetLayout="@layout/test" />
android:key="pref_fav_category"
android:title="@string/pref_fav_category_tittle" >
android:key="fav_city"
android:summary="@string/pref_ed_name_sum"
android:title="@string/pref_ed_name_tittle" />
android:dialogTitle="@string/pref_fav_title"
android:entries="@array/fav_phone"
android:entryValues="@array/fav_phone"
android:key="pref_fav_phone"
android:summary="@string/pref_fav_sum"
android:title="@string/pref_fav_title" />
android:key="pref_contact_category"
android:title="@string/pref_fav_contact_tittle" />
android:key="pre_voicemail_setting_key"
android:persistent="false"
android:title="@string/pref_voicemail_tittle" >
android:key="voice_mail"
android:summary="@string/pref_voicemail_tittle"
android:title="@string/pref_voicemail_sum" >
android:action="android.intent.action.VIEW"
android:data="http://www.baidu.com" />
Activity处理方法
public class PreferenceMethods extends PreferenceActivity implements
OnPreferenceClickListener, OnPreferenceChangeListener {
public static final String PREF_BLUE = "pref_blue";
public static final String PREF_LISTPHONE = "pref_fav_phone";
public static final String PREF_CITY = "fav_city";
public static final String PREF_RING = "pref_ring";
private CheckBoxPreference mBlueCheckPreference;
private ListPreference mFavPhoneListPreference;
private EditTextPreference mFavCityEdPreference;
private RingtonePreference mRingtonePreference;
private SwitchPreference mSwitchPreference;
private SharedPreferences mSp;
boolean isCheck;
@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference);
mSp = PreferenceManager.getDefaultSharedPreferences(this);
isCheck = mSp.getBoolean(PREF_BLUE, true);
String favPhone = mSp.getString(PREF_LISTPHONE, "MI");
mBlueCheckPreference = (CheckBoxPreference) findPreference(PREF_BLUE);
mFavPhoneListPreference = (ListPreference) findPreference(PREF_LISTPHONE);
mFavCityEdPreference = (EditTextPreference) findPreference(PREF_CITY);
mRingtonePreference = (RingtonePreference) findPreference(PREF_RING);
mSwitchPreference = (SwitchPreference) findPreference("sw_perference");
// mSwitchPreference.setEnabled(false);
mSwitchPreference.setChecked(true);
mSwitchPreference.setShouldDisableView(true);
mFavPhoneListPreference.setSummary("dddd");
mFavPhoneListPreference.setOnPreferenceClickListener(this);
mFavPhoneListPreference.setOnPreferenceChangeListener(this);
mFavPhoneListPreference.setValueIndex(3);
mBlueCheckPreference.setChecked(isCheck);
mBlueCheckPreference.setOnPreferenceClickListener(this);
mBlueCheckPreference.setOnPreferenceChangeListener(this);
String favCity = mSp.getString(PREF_CITY, "成都");
mFavCityEdPreference.setOnPreferenceClickListener(this);
mFavCityEdPreference.setOnPreferenceChangeListener(this);
mFavCityEdPreference.setSummary(favCity);
String favRingtone = mSp.getString(PREF_RING, "十年");
mRingtonePreference.setSummary(favRingtone);
mRingtonePreference.setOnPreferenceChangeListener(this);
mRingtonePreference.setOnPreferenceClickListener(this);
}
@Override
public boolean onPreferenceClick(Preference preference) {
return true;
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (mBlueCheckPreference.equals(preference)) {
isCheck = !isCheck;
mBlueCheckPreference.setChecked(isCheck);
}
if (mFavPhoneListPreference.equals(preference)) {
mFavPhoneListPreference.setSummary(newValue.toString());
}
if (mFavCityEdPreference.equals(preference)) {
mFavCityEdPreference.setSummary(newValue.toString());
}
if (preference.equals(mRingtonePreference)) {
mRingtonePreference.setSummary(newValue.toString());
}
return true;
}
}
4. 使用Fragment 定义Preference
此方法比较建议是使用,如需了解Fragment 使用方法,请看Fragment 使用详解
首先自定Fragment片段
a.自定义 SettingsFragment
public class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preference);
}
}
b.preference 实现
android:key="about_phone"
android:summary="@string/pref_about_phone_sum"
android:title="@string/pref_about_phone_tittle" />
android:key="sw_perference"
android:summary="@string/pref_about_phone_sum"
android:title="@string/pref_about_phone_tittle" />
android:key="pref_ring"
android:summary="@string/pref_ringtone_tittle"
android:title="@string/pref_ringtone_sum" />
android:defaultValue="true"
android:icon="@null"
android:key="pref_blue"
android:summary="@string/preference_blue_sum"
android:title="@string/preference_blue_tittle"
android:widgetLayout="@layout/test" />
android:key="pref_fav_category"
android:title="@string/pref_fav_category_tittle" >
android:key="fav_city"
android:summary="@string/pref_ed_name_sum"
android:title="@string/pref_ed_name_tittle" />
android:dialogTitle="@string/pref_fav_title"
android:entries="@array/fav_phone"
android:entryValues="@array/fav_phone"
android:key="pref_fav_phone"
android:summary="@string/pref_fav_sum"
android:title="@string/pref_fav_title" />
android:key="pref_contact_category"
android:title="@string/pref_fav_contact_tittle" />
android:key="pre_voicemail_setting_key"
android:persistent="false"
android:title="@string/pref_voicemail_tittle" >
android:key="voice_mail"
android:summary="@string/pref_voicemail_tittle"
android:title="@string/pref_voicemail_sum" >
android:action="android.intent.action.VIEW"
android:data="http://www.baidu.com" />
Activity 中调用Fragment
public class SettingPreferenceActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_preference);
getFragmentManager().beginTransaction()
.replace(R.id.fm_pref, new SettingsFragment()).commit();
}
}
填充布局
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
android:id="@+id/fm_pref"
android:layout_width="match_parent"
android:layout_height="match_parent" />
5.实现效果如下:
至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!
preference的用法 java_Preference 使用详解相关推荐
- C# Timer用法及实例详解
1.C# Timer用法及实例详解 http://developer.51cto.com/art/200909/149829.htm http://www.cnblogs.com/OpenCoder/ ...
- Sklearn中predict_proba函数用法及原理详解
Sklearn中predict_proba函数用法及原理详解(以logistic回归为例) 网上对predict_proba的数学原理解释的太少了,也不明确,特意总结一下,并给出有些不能用该方法的原因 ...
- html渐变线条代码,CSS3实现线性渐变用法示例代码详解
前言 演示下太老版本浏览器的渐变实现了[IE9-]; IE9以前,渐变都是通过滤镜实现的,大体的写法就是这样; .testDiv { width:400px; height:400px; border ...
- python cut函数_基于python cut和qcut的用法及区别详解
我就废话不多说了,直接上代码吧: from pandas import Series,DataFrame import pandas as pd import numpy as np from num ...
- python中的super用法详解_python super用法及原理详解
这篇文章主要介绍了python super用法及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 概念 super作为python的内建函数. ...
- groupby的用法及原理详解
groupby的用法及原理详解_回家养老-CSDN博客_groupby 写在前面的话:用了好久group by,今天早上一觉醒来,突然感觉group by好陌生,总有个筋别不过来,为什么不能够sele ...
- python Format()函数的用法___实例详解(一)(全,例多)___各种格式化替换,format对齐打印
python Format()函数的用法___实例详解(一)(全,例多) (格式化替换,关键字替换,列表字典替换,类格式化, 魔法函数格式化,对齐及填充格式化,format对齐打印) 本篇目录内容:
- python bisect_Python中bisect的用法及示例详解
bisect是python内置模块,用于有序序列的插入和查找. 查找: bisect(array, item) 插入: insort(array,item) 查找 import bisect a = ...
- Python中Print()函数的用法___实例详解(二)(全,例多)
Python中Print()函数的用法___实例详解(二)(全,例多) 目录 十一.Print()小例子 十二.Print()中文输入显示乱码问题 十三.Print()写入文件 十四.print()在 ...
最新文章
- 【深度学习】深入浅出nnUnet的数据处理方法
- oracle adf immediate,Oracle ADF 双击行事件
- 关于ST02看到SWAP红色的讨论
- rh9.0虚拟机dmesg启动过程分析(1)
- python重定向到socket_python套接字流重定向实例汇总
- hive 动态分区实现 (hive-1.1.0)
- JavaScript笔记-表格中放按钮并点击调用
- swiper叠加轮播效果 (含源码) - 案例篇
- oracle 控制html输出样式,Oracle之sqlplus输出到html
- el-tree 拖拽互换位置_那些我们与UI交互的动作(三·拖拽)
- 毛坯房验房留意事项及细节有哪些呢?
- 非平衡电桥电阻计算_绝缘检测电桥法中的几个重要概念
- 剑指offer面试题65. 不用加减乘除做加法(位运算)
- Linux下载安装NodeJS
- 优化设计-内点惩罚函数法-MATLAB编程
- 户籍化管理系统 c语言,社会单位消防安全“户籍化管理系统录入要点
- 504网站服务器传输超时,504源服务器链接超时cdn
- 个人wiki搭建资料整理
- 顺序表前m和后n元素交换位置
- 让机器学习助力医疗领域
热门文章
- FlexTime——Mac计时器工具小帮手!
- 从一道CTF题学习PHP反序列化漏洞
- duwentao-[本地复现]-[__wakeup()魔术方法绕过]
- django查询分类
- 和尚挑水故事IT新解
- 【kafka连载五】window单机版kafkazookeeper使用过程,问题整理(持续更新)
- 【论文阅读】用于代表单个树木的机载LiDAR 3D点云针叶树/落叶分类的深度学习
- Multi-layered tree crown extraction from LiDAR data using graph-based segmentation
- Android 微信套餐之绑定微信
- netcore vue elementui自动代码生成器