Preference 在Android 中重要的控件之一,比如 Settings 模块大部分都是通过Preference 实现的,本章将研究preference 使用方法
- Perference 简介
- Perference 使用方法
- 使用XML定义Preference
- 使用Fragment 定义Preference
- 实现效果
欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息
微信公众号:ProgramAndroid
我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。
java.lang.Object
↳ android.preference.Preference
Preference 常用于APP 设置模块,比如 Android 系统中的Settings 模块,它可以默认把我们的数据保存在SharePreference中。
settings中常用Preference 举例
SharedPreferences mSp = PreferenceManager.getDefaultSharedPreferences(this);
String favPhone=mSp.getString(PREF_LISTPHONE, "MI");
Preference通过key-values 键值对的形式保存在/data/data/包名/shared_prefs/包名_preferences.xml
image.png
一般在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 常用使用方法如下两种:
此方法有点过时,不太建议使用,但目前还可以用。
其使用方法如下:
Demo 如下:
preferences.xml
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 SharedPreferences mSp;
boolean isCheck;
@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);
mFavPhoneListPreference.setSummary(favPhone);
mFavPhoneListPreference.setOnPreferenceClickListener(this);
mFavPhoneListPreference.setOnPreferenceChangeListener(this);
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 使用方法,请看Fragment使用方法详解http://www.jianshu.com/p/0bf6a32baa1a
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);
}
}
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();
}
}
Preference使用方法详解
至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!
如有侵权,请联系小编,小编对此深感抱歉,届时小编会删除文章,立即停止侵权行为,请您多多包涵。
既然都看到这里,领两个红包在走吧!
以下两个红包每天都可以领取1.支付宝搜索 522398497,或扫码支付宝红包海报。
支付宝扫一扫,每天领取大红包
2.微信红包,微信扫一扫即可领取红包
微信扫一扫,每天领取微信红包
小礼物走一走,来简书关注我