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

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

一、Preference 简介
二、Preference 使用方法
三、使用XML定义Preference
四、使用Fragment 定义Preference
五、实现效果如下:

一、Preference 简介

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

1.Preference 继承关系

java.lang.Object    ↳ android.preference.Preference 

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

settings中常用Preference 举例

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 数据保存路径

二、 Preference 使用方法

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

1.常用Preference控件如下:

PreferenceScreen
CheckBoxPreference
EditTextPreference
ListPreference
PreferenceCategory
RingtonePreference.

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

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

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

三、使用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"?>                                                                                

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 干货分享

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

更多相关文章

  1. Android——Fragment的静态注册和动态注册(含源码下载)
  2. ListView的Adapter使用(绑定数据) 之 自定义每一项的布局去绑定
  3. LayoutInflater的用法总结
  4. Android(安卓)UI 常用控件讲解
  5. Android(安卓)ListView 滑动背景为黑色的解决办法
  6. Android布局中ScrollView与ListView的冲突
  7. Android控件
  8. xmlns:tools
  9. RelativeLayout(Android)中实现控件平分屏幕

随机推荐

  1. React Native基础之Image
  2. Android的数据存储方式
  3. Android(安卓)完全退出
  4. QT 仿android launcher
  5. 开发android,我们需要哪些技能基础。
  6. Android http中文乱码问题 转
  7. 提示Android(安卓)requires compiler com
  8. Android初次使用遇到的两个问题
  9. android studio mac 获取MD5 SHA1 SHA256
  10. android 7.0拍照问题file:///storage/emu