preference的用法 java_Preference 使用详解

1c272b63e1e098ac69ab49e1a813b1d3.gif

ba8afdf34987c559ea2180385838c830.png

阅读五分钟,每日十点,和您一起终身学习,这里是程序员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中。

c0457b3d84a6682276ca3d54165961c0.png

键值对(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

7b2474d60ad59f41a83a9d20dc1ddc70.png

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.实现效果如下:

b4887bea73f10cdc4ef4361e55e9800d.png

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

aba4929e4e0f8549c3e36b1e83af9525.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值