Android PreferenceFragment
关键代码
加载Preference
addPreferencesFromResource(R.xml.settings);
getPreferenceManager().setSharedPreferencesName("hidden_settings");
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:key="heart_interval"
android:summary=""
android:title="心跳设置(秒)">
<EditTextPreference
android:key="idle_heart_interval"
android:title=""
android:inputType="number" />
<EditTextPreference
android:key="circuit_heart_interval"
android:title=""
android:inputType="number" />
<EditTextPreference
android:key="expansion_heart_interval"
android:title=""
android:inputType="number" />
<EditTextPreference
android:key="inspect_heart_interval"
android:title=""
android:inputType="number" />
</PreferenceCategory>
<PreferenceCategory
android:key="lbs_interval"
android:summary=""
android:title="定位设置(秒)">
<EditTextPreference
android:key="idle_lbs_interval"
android:title=""
android:inputType="number" />
<EditTextPreference
android:key="circuit_lbs_interval"
android:title=""
android:inputType="number" />
<EditTextPreference
android:key="expansion_lbs_interval"
android:title=""
android:inputType="number" />
<EditTextPreference
android:key="inspect_lbs_interval"
android:title=""
android:inputType="number" />
</PreferenceCategory>
</PreferenceScreen>
以上是加载普通的EditTextPreference,如果想要加载复杂控件preference,比如TimerPicker
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:key="instruction"
android:summary="修改完成之后需要重启程序方可生效"
android:title="设置夜晚省电模式参数">
<CheckBoxPreference
android:disableDependentsState="false"
android:key="isPowerSavingOn"
android:title="是否开启夜晚省电模式" />
<com.main.admin.tdline.fragment.TimerPickerPreference
android:dependency="isPowerSavingOn"
android:key="time_start"
android:title="请选择工作开始时间" />
<com.main.admin.tdline.fragment.TimerPickerPreference
android:dependency="isPowerSavingOn"
android:key="time_stop"
android:title="请选择工作结束时间" />
</PreferenceCategory>
</PreferenceScreen>
有一点需要注意的是,这样加载的preference,默认情况下summary与text的值是空的(即便有存储的值,在首次打开是text是空的;如果赋值了,当前页面不关闭,再打开是有值的)。所以需要进行初始化
private void init(){
for(int i = 0; i < 8; i++){
EditTextPreference etp = (EditTextPreference)getPreferenceScreen().findPreference(IntervalManager.keys[i]);
etp.setText(String.valueOf(data[i]));
etp.setSummary(String.valueOf(data[i]));
}
}