android 自定义设置界面,Android 设置界面之 Preference

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文件

你可能感兴趣的:(android,自定义设置界面)