Preference 使用详解
阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android
本篇文章主要介绍 Android
开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:
一、Preference 简介
二、Preference 使用方法
三、使用XML定义Preference
四、使用Fragment 定义Preference
五、实现效果如下:
一、Preference 简介
Preference
在Android
中重要的控件之一,比如 Settings
模块大部分都是通过Preference
实现的,本章将研究preference
使用方法
1.Preference 继承关系
java.lang.Object ↳ android.preference.Preference
Preference
常用于APP
设置模块,比如Android
系统中的Settings
模块,它可以默认把我们的数据保存在SharePreference
中。
2.键值对(key-values)
获取方法同 SharePreference
SharedPreferences mSp = PreferenceManager.getDefaultSharedPreferences(this); String favPhone = mSp.getString(PREF_LISTPHONE, "MI");
3.Preference 数据保存
Preference
通过key-values
键值对的形式保存。
保存路径如下:
/data/data/包名/shared_prefs/包名_preferences.xml
二、 Preference 使用方法
一般在XML
文件夹中创建xml
文件来对Settings
进行布局,布局文件中通常使用PreferenceScreen
容器,PreferenceScreen
包含多个 Preference
控件,PreferenceCategory
可以设置分类标题。
1.常用Preference
控件如下:
PreferenceScreen
CheckBoxPreference
EditTextPreference
ListPreference
PreferenceCategory
RingtonePreference.
上面控件等同Layout
布局中的View
,PreferenceScreen
等同Layout
布局中的ViewGroup
。在Android 3.0
之前需要继承PreferenceActivity
(此方法不是太推荐使用,已被启用),3.0
之后更高版本,则需要继承Activity
,使用Fragment
控制布局,然后实现不同控件的处理事件。
2.Perference
常用使用方法如下两种:
- 1.使用XML定义
Preference
- 2.使用
Fragment
定义Preference
三、使用XML定义Preference
此方法有点过时,不太建议使用,但目前还可以用。
其使用方法如下:
- 将
XML
文件保存在res/xml/
目录中 例如:preferences.xml
- 继承
PreferenceActivity
在onCreate
方法中直接调用addPreferencesFromResource(R.xml.preference);
添加布局 - 点击事件处理
setOnPreferenceClickListener
,内容发生改变事件处理setOnPreferenceChangeListener
Preference
使用案例如下:
res /xml /preferences.xml
<?xml version="1.0" encoding="utf-8"?>
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; }}
四、 使用Fragment 定义Preference
此方法比较建议是使用,如需了解Fragment
使用方法,请看Fragment 使用详解
1. 首先自定Fragment片段
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); }}
2.preference 实现
<?xml version="1.0" encoding="utf-8"?>
3. 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(); }}
4.填充布局
<?xml version="1.0" encoding="utf-8"?>
五、实现效果如下:
Preference使用方法详解友情推荐:
Android 干货分享
至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!
更多相关文章
- Android——Fragment的静态注册和动态注册(含源码下载)
- ListView的Adapter使用(绑定数据) 之 自定义每一项的布局去绑定
- LayoutInflater的用法总结
- Android(安卓)UI 常用控件讲解
- Android(安卓)ListView 滑动背景为黑色的解决办法
- Android布局中ScrollView与ListView的冲突
- Android控件
- xmlns:tools
- RelativeLayout(Android)中实现控件平分屏幕