Android 偏好设置 大于3.0使用 (类似Settings界面效果)

第一种方法:用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, "加载了默认偏好文件");
		}
	}
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值