第一种方法:用PreferenceFragment 3.0之后使用的,在v4包中也没有它。
addPreferencesFromResource(R.xml.preference);
第二种方法:在PreferenceActivity
loadHeadersFromResource(R.xml.preference_header, target); //加载偏好头文件
/*
* 3.0以上使用偏好头文件有个好处:就是在大屏幕比如平板上,可以自动 显示为左右两个面板
*/
//本activity兼容3.0以下
public class TestPreferenceFragmentHeaderActivity extends PreferenceActivity {
@Override //>=3.0时 会直接调用该函数 不调用onCreate
public void onBuildHeaders(List<Header> target) {
super.onBuildHeaders(target);
//加载 偏好头文件, 头文件中可以使用多个fragment来加载不同的preference文件;
//也可以使用同一个,用<extra>来区分, getArguments.getString 来取出
loadHeadersFromResource(R.xml.preference_header, target);
LogUtils.printInfo("", "加载了header偏好头文件");
}
@Override //小于3.0时 加载
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
// Load the legacy preferences headers
addPreferencesFromResource(R.xml.preference);
LogUtils.printInfo("", "加载了old 偏好文件");
}
}
}
preference_header.xml
<?xml version="1.0" encoding="utf-8"?>
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 通过不同的fragment来加载不同的偏好文件 -->
<!-- <header
android:fragment="com.stone.fragment.MyPreferenceFragment1"
android:summary="summ_category_one"
android:title="category_one" />
<header
android:fragment="com.stone.fragment.MyPreferenceFragment2"
android:summary="summ_category_two"
android:title="category_two" >
</header> -->
<!-- 通过同一个fragment来加载不同的偏好文件,使用extra来区分 -->
<header
android:fragment="com.stone.fragment.MyPreferenceFragment"
android:summary="summ_category_one"
android:title="category_one" >
<extra
android:name="preKey"
android:value="pre1" />
</header>
<header
android:fragment="com.stone.fragment.MyPreferenceFragment"
android:summary="summ_category_two"
android:title="category_two" >
<!-- key/value pairs can be included as arguments for the fragment. -->
<extra
android:name="preKey"
android:value="pre2" />
</header>
</preference-headers>
MyPreferenceFragment
public class MyPreferenceFragment extends PreferenceFragment {
private final String TAG = "MyPreferenceFragment";
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
// 2.复用,加载不同的xml, 需要一个preference-headers的xml文件来定义
String settingValue = getArguments().getString("preKey");
if (TextUtils.equals("pre1", settingValue)) {
addPreferencesFromResource(R.xml.preference1);
LogUtils.printInfo(TAG, "加载了偏好文件1");
} else if (TextUtils.equals("pre2", settingValue)) {
addPreferencesFromResource(R.xml.preference2);
LogUtils.printInfo(TAG, "加载了偏好文件2");
} else if (TextUtils.equals("pre_default", settingValue)){
// 直接加载一个preference的xml
addPreferencesFromResource(R.xml.preference);
LogUtils.printInfo(TAG, "加载了默认偏好文件");
}
}
}