Preference 使用详解

Preference 使用详解极力推荐文章 欢迎收藏 Android 干货分享 阅读五分钟 每日十点 和您一起终身学习 这里是程序员 Android 本篇文章主要介绍 Android 开发中的部分知识点 通过阅读本篇文章 您将收获以下内容 Perference 简介 Perference 使用方法

大家好,我是讯享网,很高兴认识大家。

strip
讯享网

极力推荐文章:欢迎收藏
Android 干货分享

1240

阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android

本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

  1. Perference 简介
  2. Perference 使用方法
  3. 使用XML定义Preference
  4. 使用Fragment 定义Preference
  5. 实现效果

PreferenceAndroid 中重要的控件之一,比如 Settings 模块大部分都是通过Preference 实现的,本章将研究preference 使用方法

1.Preference 简介

Preference 继承关系

java.lang.Object    ↳ android.preference.Preference 

讯享网

Preference 常用于APP设置模块,比如Android 系统中的Settings 模块,它可以默认把我们的数据保存在SharePreference中。

settings中常用Preference 举例

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

Preference 数据保存路径

2. Perference 使用方法

一般在XML文件夹中创建xml文件来对Settings进行布局,布局文件中通常使用PreferenceScreen容器,PreferenceScreen包含多个 Preference控件,PreferenceCategory可以设置分类标题。

常用Preference控件如下:
PreferenceScreen
CheckBoxPreference
EditTextPreference
ListPreference
PreferenceCategory
RingtonePreference.

上面控件等同Layout布局中的ViewPreferenceScreen 等同Layout布局中的ViewGroup。在Android 3.0之前需要继承PreferenceActivity(此方法不是太推荐使用,已被启用),3.0之后更高版本,则需要继承Activity,使用Fragment控制布局,然后实现不同控件的处理事件。

Perference常用使用方法如下两种:

    1. 使用XML定义Preference
    1. 使用Fragment 定义Preference

3. 使用XML定义Preference

  1. XML 文件保存在res/xml/目录中 例如:preferences.xml
  2. 继承PreferenceActivityonCreate方法中直接调用addPreferencesFromResource(R.xml.preference);添加布局
  3. 点击事件处理setOnPreferenceClickListener,内容发生改变事件处理 setOnPreferenceChangeListener

Preference使用案例如下:
res /xml /preferences.xml

<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <Preference android:key="about_phone" android:summary="@string/pref_about_phone_sum" android:title="@string/pref_about_phone_tittle" /> <SwitchPreference android:key="sw_perference" android:summary="@string/pref_about_phone_sum" android:title="@string/pref_about_phone_tittle" /> <RingtonePreference android:key="pref_ring" android:summary="@string/pref_ringtone_tittle" android:title="@string/pref_ringtone_sum" /> <CheckBoxPreference 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" /> <PreferenceCategory android:key="pref_fav_category" android:title="@string/pref_fav_category_tittle" > <EditTextPreference android:key="fav_city" android:summary="@string/pref_ed_name_sum" android:title="@string/pref_ed_name_tittle" /> <ListPreference 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" /> </PreferenceCategory> <PreferenceCategory android:key="pref_contact_category" android:title="@string/pref_fav_contact_tittle" /> <PreferenceScreen android:key="pre_voicemail_setting_key" android:persistent="false" android:title="@string/pref_voicemail_tittle" > <Preference android:key="voice_mail" android:summary="@string/pref_voicemail_tittle" android:title="@string/pref_voicemail_sum" > <intent android:action="android.intent.action.VIEW" android:data="http://www.baidu.com" /> </Preference> </PreferenceScreen> </PreferenceScreen>

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 使用详解

    1. 首先自定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 实现

讯享网<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <Preference android:key="about_phone" android:summary="@string/pref_about_phone_sum" android:title="@string/pref_about_phone_tittle" /> <SwitchPreference android:key="sw_perference" android:summary="@string/pref_about_phone_sum" android:title="@string/pref_about_phone_tittle" /> <RingtonePreference android:key="pref_ring" android:summary="@string/pref_ringtone_tittle" android:title="@string/pref_ringtone_sum" /> <CheckBoxPreference 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" /> <PreferenceCategory android:key="pref_fav_category" android:title="@string/pref_fav_category_tittle" > <EditTextPreference android:key="fav_city" android:summary="@string/pref_ed_name_sum" android:title="@string/pref_ed_name_tittle" /> <ListPreference 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" /> </PreferenceCategory> <PreferenceCategory android:key="pref_contact_category" android:title="@string/pref_fav_contact_tittle" /> <PreferenceScreen android:key="pre_voicemail_setting_key" android:persistent="false" android:title="@string/pref_voicemail_tittle" > <Preference android:key="voice_mail" android:summary="@string/pref_voicemail_tittle" android:title="@string/pref_voicemail_sum" > <intent android:action="android.intent.action.VIEW" android:data="http://www.baidu.com" /> </Preference> </PreferenceScreen> </PreferenceScreen>
    1. 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(); } }
  • 填充布局
讯享网<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <FrameLayout android:id="@+id/fm_pref" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>

5.实现效果如下:

Preference使用方法详解

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

微信关注公众号: 程序员Android,领福利

小讯
上一篇 2025-03-19 23:36
下一篇 2025-01-06 13:21

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/63680.html