一、简介
PreferenceFragment 是一个用来展示应用程序设置界面的 Fragment ,方便快捷的完成偏好设置相关任务,特别是配合 PreferenceManager 一起使用,可以轻松的完成偏好数据的存储与读取。
二、使用方法
1、创建 PreferenceFragment
//继承 PreferenceFragmentCompat
public class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.preferences, rootKey);
}
}
继承 PreferenceFragmentCompat 并重新实现以下方法:
onCreatePreferences:
- 调用 setPreferencesFromResource(intxmlResId, String rootKey) 方法设置自定义 XML 文件中的首选项。在文件 xmlResId 中声明的首选项将被 inflate 到 PreferenceScreen 中。
2、创建布局文件
XML 中通过声明 PreferenceScreen 和 PreferenceCategory 来完成分类的显示,用各种不同的 Preference 部件来对偏好数据项进行展示与操作,例如 CheckBoxPreference、SeekBarPreference、ListPreference、EditTextPreference等。
三、主要方法详解
1、addPreferencesFromResource(int preferencesResId)
此方法已废弃,被推荐使用 setPreferencesFromResource(int preferencesResId, String key) 方法代替。
2、findPreference(CharSequence key)
根据 key 值关联到对应的 Preference 对象。
3、setPreferencesFromResource(int preferencesResId, String key)
加载 XML 文件,并将首选项文件 inflate 到布局中,key 参数指定首选项的根节点的 key 值。
4、PreferenceChangeListener 监听器
可以在应用程序代码中动态的进行注册。
Preference myPref = findPreference("example_checkbox_preference");
myPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
Toast.makeText(getContext(), "The checkbox preference is " + newValue.toString(), Toast.LENGTH_LONG).show();
return true;
}
});
四、示例代码
下面是一个在 MainActivity 中使用 SettingsFragment 的实例代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//加载 fragment
getSupportFragmentManager()
.beginTransaction()
.replace(android.R.id.content, new SettingsFragment())
.commit();
}
}
SettingsFragment 的实现依然保持原有的方式:
public class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.preferences, root单文件中找到:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xxx.xxx">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- SettingsActivity调整 -->
<activity android:name=".SettingsActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
<intent-filter>
<action android:name="android.intent.action.SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
`
五、结尾
以上就是 PreferenceFragment 的使用方法和相关知识点的详细介绍。通过使用 PreferenceFragment ,我们可以更方便快捷的实现偏好设置和偏好数据的存储和读取,为 Android 应用程序的开发带来更多便利。