概述
在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
的子类有:
CheckBoxPreference
EditTextPreference
ListPreference
PreferenceCategory
RingtonePreference
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的时候。