概述
在Android中,一个App肯定是少不了设置。应用通常包括允许用户修改应用特性和行为的设置。例如,有些应用允许用户指定是否启用通知,或指定应用与云端同步数据的频率。Google官方介绍的是使用Android Preference API去构建一致的设置界面,以给用户更好的体验。能力有限,总给了一些自己学习经验,不喜勿喷哦! kensoon918@163.com only for feedback.
概览:
Preference
创建 xml
您必须将 XML 文件保存在
res/xml/目录中。尽管您可以随意命名该文件,但它通常命名为preferences.xml。您通常只需一个文件,因为层次结构中的分支(可打开各自的设置列表)是使用PreferenceScreen的嵌套实例声明的。
编写 xml
设置是使用您在 XML 文件中声明的
Preference类的各种子类构建而成,而不是使用 View 对象构建用户界面。Preference 对象是单个设置的构建基块。每个 Preference 均作为项目显示在列表中,并提供适当的 UI 供用户修改设置。例如,CheckBoxPreference可创建一个列表项用于显示复选框,ListPreference可创建一个项目用于打开包含选择列表的对话框。Preference的子类有:
CheckBoxPreferenceEditTextPreferenceListPreferencePreferenceCategoryRingtonePreference
XML 文件的根节点必须是一个
<PreferenceScreen>元素。您可以在此元素内添加每个Preference。在<PreferenceScreen>元素内添加的每个子项均将作为单独的项目显示在设置列表中。
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
android:key="pref_sync"
android:title="@string/pref_sync"
android:summary="@string/pref_sync_summ"
android:defaultValue="true" />
<ListPreference
android:dependency="pref_sync"
android:key="pref_syncConnectionType"
android:title="@string/pref_syncConnectionType"
android:dialogTitle="@string/pref_syncConnectionType"
android:entries="@array/pref_syncConnectionTypes_entries"
android:entryValues="@array/pref_syncConnectionTypes_values"
android:defaultValue="@string/pref_syncConnectionTypes_default" />
</PreferenceScreen>
android:key
对于要保留数据值的首选项,必须拥有此属性。它指定系统在将此设置的值保存在 SharedPreferences 中时所用的唯一键(字符串)。
不需要此属性的仅有情形是:首选项是 PreferenceCategory 或PreferenceScreen,或者首选项指定要调用的 Intent(使用 元素)或要显示的 Fragment(使用 android:fragment 属性)。
android:title
此属性为设置提供用户可见的名称。
android:defaultValue
此属性指定系统应该在 SharedPreferences 文件中设置的初始值。您应该为所有设置提供默认值。
创建Activity
要在 Activity 中显示您的设置,需要扩展
PreferenceActivity类。这是传统 Activity 类的扩展,该类根据Preference对象的层次结构显示设置列表。当用户进行更改时,PreferenceActivity会自动保留与每个Preference相关的设置。如果您是开发针对 Android 3.0(API 级别 11)及更高版本系统的应用,则应使用
PreferenceFragment显示Preference对象的列表。您可以将PreferenceFragment添加到任何 Activity,而不必使用PreferenceActivity。与仅使用上述 Activity 相比,无论您在构建何种 Activity,片段都可为应用提供一个更加灵活的体系结构。因此,建议您尽可能使用
PreferenceFragment控制设置的显示,而不是使用PreferenceActivity。下面以PreferenceFragment为例:PreferenceFragment 的实现就像定义 onCreate() 方法以使用 addPreferencesFromResource() 加载首选项文件一样简单。例如:
public static class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
}
...
}
然后,正如您对其他任何 Fragment 的处理一样,您可以将此片段添加到 Activity。例如:
public class SettingsActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Display the fragment as the main content.
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new SettingsFragment())
.commit();
}
}
最后,就可以通过相应的
Intnet启动这个Activity 了。
总结
Preference 是很常用的,当你创建一个App的时候。