Android系统为设置界面的UI提供了一系列的接口,设置界面的部分和Activity是分离的,会有一个PreferenceScreen的对象
是根目录,在其中会包含CheckBoxPreference EditTextPreference ListPreference PreferenceCategory RingtonePreference
相关的接口
Preference.OnPreferenceChangeListener
Preference.OnPreferenceClickListener
PreferenceFragment.OnPreferenceStartFragmentCallback
PreferenceManager.OnActivityDestroyListener
PreferenceManager.OnActivityResultListener
PreferenceManager.OnActivityStopListener复制代码
相关的类
CheckBoxPreference
DialogPreference
EditTextPreference
ListPreference
MultiSelectListPreference
Preference
Preference.BaseSavedState
PreferenceActivity
PreferenceActivity.Header
PreferenceCategory
PreferenceFragment
PreferenceGroup
PreferenceManager
PreferenceScreen
RingtonePreference
SwitchPreference
TwoStatePreference复制代码
概述
由于设置的界面是使用Preference而不是View来创建的,需要特殊的Activity或者Fragment的子类来显示
版本低于Android 3.0(API 10),请使用PreferenceActivity
版本高于Android 3.0(API 10),可以在普通的Activity中使用PreferenceFragment来显示,也可以使用PreferenceActivity
在XML中定义Preference
可以在运行时创建Preference也可以通过在xml中定义Preference,每一个Preference的子类都可以用XML中的元素来定义,在 res/xml/
文件夹中创建一个文件如preference.xml
如果想定义分屏的设置布局,需要分别定义XML
preference.xml一般的布局如下:
复制代码
创建PreferenceActivity
定义xml文件
在res/xml/文件夹中定义 preference.xml
.....
复制代码
Activity继承PreferenceActivity
public class SettingsActivity1 extends PreferenceActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference); //API 10之后的版本这个方法以及过时,推荐使用Fragment的方式
}
}复制代码
使用Preference Fragments
在高于Android 3.0(API 10)的版本,应该使用PreferenceFragment来显示Preference,就不需要继承PreferenceActivity
继承PreferenceFragment在onCreate()方法中调用addPreferencesFromResource()方法
public class SettingsFragment extends PreferenceFragment{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.addPreferencesFromResource(R.xml.preference);
}
}复制代码
创建一个Activity,然后将定义的Fragments添加到当前的Activity中,最终呈现的效果和PreferenceActivity是一样的
public class SettingsActivity2 extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getFragmentManager().beginTransaction()
.replace(android.R.id.content, new SettingsFragment())
.commit();
}
}复制代码
显示新条目
复制代码
list view preference
复制代码
输入框
复制代码
使用Preference Header
为每一个设置文件单独创建一个PreferenceFragment的实例
创建headers的XML文件,在fragment中设置对应的PreferenceFragment的实例
使用PreferenceActivity
实现obBuildHeaders()方法
复制代码
元素中的内容,可以通过Bundle获得,通过方法getArguments()获取
显示headers使用PreferenceActivity的回调方法onBuildHeaders()加载preference-headers.xml文件
@Override
public void onBuildHeaders(List复制代码target) {
super.onBuildHeaders(target);
loadHeadersFromResource(R.xml.preference_header, target);
}复制代码
自定义Preference的布局
通过Preference的属性android:layout=""设置自定义的layout文件