PreferenceFragment:Android中快速实现应用偏好设置的方法
在开发Android应用程序时,经常需要制定一些偏好设置,以使用户可以自定义其应用程序的行为。这些偏好设置可能包括启用/禁用通知、调整字体大小、更改背景颜色、切换语言等。如果您手动为每个设置项创建一个视图,那么这将是一项冗长的任务。幸运的是,Android Framework提供了一种方便快捷的方法来管理偏好设置。
PreferenceFragment是一个可以让你快速而轻松地添加、修改和控制应用程序设置的Android类。使用PreferenceFragment,您可以直接在XML文件中定义每个设置和其类型以及旋钮和方框等控件的图标和内容。
下面我们将详细了解PreferenceFragment的用法。
1. 创建PreferenceFragment类
PreferenceFragment是Android API 11引入的,因此它只能在API 11及以上的设备上使用。为了使用PreferenceFragment,请首先确保在您的项目中使用的SDK版本至少是API 11。 然后,在项目的Activity中创建PreferenceFragment的实例。
public class MyPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference_screen);
}
}
在这里,我们首先扩展了PreferenceFragment类,并覆盖了它的onCreate()方法。该方法有一个Bundle参数,您可以使用它来恢复Activity的状态。这里,我们仅仅调用了超类的onCreate()方法,并使用addPreferencesFromResource()方法从XML文件中添加了偏好设置。
2. 创建preference_screen.xml文件
我们已经在上一步中调用了addPreferencesFromResource()方法并指定了一个XML文件。接下来,我们需要创建与文件名相应的XML文件。在我们的例子中,我们将使用preference_screen.xml。在这个XML文件中,我们可以定义我们的偏好设置,并指定它们级别。
android:title="Enable Notifications" android:defaultValue="true" android:key="notifications_pref" /> android:key="list_preference" android:title="List preference" android:summary="This preference allows to select an item in a array" android:entries="@array/list_preference_entries" android:entryValues="@array/list_preference_values" android:defaultValue="@string/list_preference_value" /> android:title="Signature" android:key="signature_pref" android:dialogTitle="Type Your Signature" android:dialogMessage="Enter signature of no more than 100 characters" android:dialogIcon="@drawable/ic_launcher" android:defaultValue="None" android:singleLine="true" android:maxLines="1" /> android:title="Auto-rotate screen" android:defaultValue="true" android:key="switch_pref" /> android:title="Brightness" android:key="seeker_pref" android:defaultValue="50" android:min="0" android:max="100" android:progress="50" android:dialogMessage="Move the slider to change the display brightness" /> android:title="Select Language" android:key="language_pref" android:entries="@array/lang" android:entryValues="@array/lang_values" android:defaultValue="en" /> 3. 偏好设置的类型 在上述xml文件中,我们定义了五种偏好设置的类型: A. CheckBoxPreference: 勾选框类型的偏好设置。使用它们,您可以打开/关闭某个功能。这个示例中,我们在Account Settings类别下定义了一个用于启用/禁用通知的偏好设置。 B. ListPreference: 下拉列表类型的偏好设置。使用它们,您可以从列表中选择一个对象。这个示例中,我们在Account Settings类别下定义了一个用于切换语言的偏好设置。 C. EditTextPreference: 文本框类型的偏好设置。使用它们,您可以让用户输入一个字符串,例如个性签名。这个示例中,我们在Account Settings类别下定义了一个用于输入签名的偏好设置。 D. SwitchPreference: 开关类型的偏好设置。使用它们,您可以在选项之间切换。这个示例中,我们在Display类别下定义了一个用于打开/关闭自动旋转屏幕的偏好设置。 E. SeekBarPreference: 拖拽条类型的偏好设置。使用它们,您可以让用户在0 -100范围内拖动滑块来调整条目值。这个示例中,我们在Display类别下定义了一个用于调整终端的亮度值的偏好设置。 4. 保存和获取偏好设置 需要说明的是,当用户调整偏好设置时,这些偏好设置仅存储在用户的设备上。要存储这些设置,我们需要在我们的Java代码中进行处理。 保存用户的偏好设置: SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences.Editor editor = prefs.edit(); editor.putBoolean("notifications_pref", true); editor.putString("list_preference", "entry_value"); editor.putString("signature_pref", "User Signature"); editor.putBoolean("switch_pref", true); editor.putInt("seeker_pref", 50); editor.putString("language_pref", "en"); editor.apply(); 在这种情况下,我们使用SharedPreferences类保存和读取数据。SharedPreferences类允许我们在调用Activity或Fragment时存储和检索数据。 getBoolean("notifications_pref", false); 在这种情况下,我们使用SharedPreferences类获取存储的值。SharedPreferences类允许我们在调用Activity或Fragment时存储和检索数据。 5. 总结 借助PreferenceFragment,我们可以快速轻松地添加偏好设置到我们的应用程序中。借助简单的XML代码,我们可以定义偏好设置的类型和样式。我们还介绍了如何使用SharedPreferences来存储和检索数据。 可能值得一提的是,PreferenceFragment不支持旧的preferenceActivity。但我们可以使用第三方库或自行编写代码来允许旧的activity和新的PreferenceFragment共同工作。