首页 > 技术文章 > PreferenceActivity简单使用app设置页

gmm283029 2014-12-11 14:54 原文

PreferenceActivity一般用来实现app的设置页

如图:























PreferenceActivity就是用SharedPreference的形式存储用户的偏好设置。 

PreferenceActivity通过读取xml的方式来显示页面,控件都是封装好的,实用起来特别方便。 

1.先在res下新建一个xml文件 preference.xml

<?xml version="1.0" encoding="UTF-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >//根节点

    <PreferenceCategory android:title="FirstCategory" >//分割线隔开的一个一个分类
        <ListPreference
            android:defaultValue="list key default values"
            android:dialogTitle="list_dialog_title"
            android:entries="@array/list_array"
            android:entryValues="@array/list_array"          //单选的list
            android:key="list_key"
            android:summary="list summary"
            android:title="list title" >
        </ListPreference>
    </PreferenceCategory>
    <PreferenceCategory android:title="Second Category" >
        <EditTextPreference
            android:defaultValue="edit default value"
            android:key="edit_text_key"                      //编辑框样式
            android:summary="edit summary"
            android:title="edit_title" >
        </EditTextPreference>

        <CheckBoxPreference
            android:defaultValue="checkbox default value"
            android:key="checkbox_key"
            android:summary="checkbox_summary"                //复选框样式
            android:title="checkbox_title" />

        <EditTextPreference
            android:defaultValue="0"
            android:key="num_key"
            android:numeric="integer"
            android:summary="edit summary"
            android:title="input number" />

        <PreferenceScreen
            android:summary="more..."
            android:title="more" >
            <PreferenceCategory android:title="more_title" >      //嵌套一个根节点,实际点击的时候跳转新的一个屏幕
                <CheckBoxPreference
                    android:defaultValue="abcd"
                    android:key="more_key"
                    android:summary="more_key"
                    android:title="MORE" />
            </PreferenceCategory>
        </PreferenceScreen>
    </PreferenceCategory>

</PreferenceScreen>


2.新建MyPreferenceActivity 继承 PreferenceActivity

在onCreatefang方法中addPreferencFromResource(int id)加载xml

实例化,实现OnSharedPreferenceChangeListener当值发生变化是可改变控件的值,

在onResum中初始化控件的值

public class MyPreferenceActivity extends PreferenceActivity implements
		OnSharedPreferenceChangeListener {
	private ListPreference mListPreference;
	private EditTextPreference mEditTextPreference, mNumPreference;
	private CheckBoxPreference mBoxPreference;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		addPreferencesFromResource(R.xml.preference);
		initPreference();
	}

	private void initPreference() {
		mListPreference = (ListPreference) findPreference("list_key");
		mEditTextPreference = (EditTextPreference) findPreference("edit_text_key");
		mNumPreference = (EditTextPreference) findPreference("num_key");
		mBoxPreference = (CheckBoxPreference) findPreference("checkbox_key");
	}

	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		SharedPreferences mSharedPreferences = getPreferenceScreen()
				.getSharedPreferences();
		mListPreference
				.setSummary(mSharedPreferences.getString("list_key", ""));
		mEditTextPreference.setSummary(mSharedPreferences.getString(
				"edit_text_key", ""));
		// mNumPreference.setSummary(mSharedPreferences.getInt("num_key", 0));
		// mBoxPreference.setSummary(mSharedPreferences.getString("checkbox_key",
		// ""));
		mSharedPreferences.registerOnSharedPreferenceChangeListener(this);
	}

	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		getPreferenceScreen().getSharedPreferences()
				.unregisterOnSharedPreferenceChangeListener(this);
	}

	@Override
	public void onSharedPreferenceChanged(SharedPreferences arg0, String arg1) {
		if (arg1.equals("edit_text_key")) {
			mEditTextPreference.setSummary(arg0
					.getString("edit_text_key", "20"));
		} else if (arg1.equals("list_key")) {
			mListPreference.setSummary(arg0.getString("list_key", ""));
		}

	}
}


 




 

推荐阅读