编写程序配置、设置界面,你还在用listview吗,还在使用自定义dialog吗?记得自己在写第一个android应用的时候就干过这“蠢”事,不过以后都不用这么辛苦了,android不仅有封装好的组件(如:CheckBoxPreference,ListPreference),还有一个PreferenceActivity。
下边简单得用一个例子展示一下用法:
在Android项目中新建一个名为xml的文件夹,创建一个名(名字不限)为prefs.xml的文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/settings" >
<CheckBoxPreference
android:key="check_pref"
android:summary="summary"
android:title="title" />
<ListPreference
android:key="list_pref"
android:defaultValue="1"
android:dialogTitle="dialog_title"
android:entries="@array/entries"
android:entryValues="@array/entry_values"
android:summary="setting_summary"
android:title="title" />
</PreferenceScreen>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/settings" >
<CheckBoxPreference
android:key="check_pref"
android:summary="summary"
android:title="title" />
<ListPreference
android:key="list_pref"
android:defaultValue="1"
android:dialogTitle="dialog_title"
android:entries="@array/entries"
android:entryValues="@array/entry_values"
android:summary="setting_summary"
android:title="title" />
</PreferenceScreen>
上边文件中的
android:entries="@array/entries"
android:entryValues="@array/entry_values"
android:entryValues="@array/entry_values"
是在strings.xml中定义的,内容是:
...
<!-- for example -->
<string-array name="entry_values">
<item>0</item>
<item>1</item>
<item>2</item>
</string-array>
<!-- for example -->
<string-array name="entries">
<item>None</item>
<item>Snooze</item>
<item>Dismiss</item>
</string-array>
<string-array name="entry_values">
<item>0</item>
<item>1</item>
<item>2</item>
</string-array>
<!-- for example -->
<string-array name="entries">
<item>None</item>
<item>Snooze</item>
<item>Dismiss</item>
</string-array>
...
最后,java文件如下:
package com.xxx.pref;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
import android.util.Log;
public class TestPreferenceActivity extends PreferenceActivity implements
Preference.OnPreferenceChangeListener {
private static final String KEY_CHECK_PREFS = "check_pref";
private static final String KEY_LIST_PREFS = "list_pref";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
}
@Override
protected void onResume() {
super.onResume();
refresh();
}
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
Preference preference) {
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
public boolean onPreferenceChange(Preference pref, Object newValue) {
p("pref: " + pref);
p("newValue: " + newValue);
return true;
}
private void p(String str) {
Log.i("chencc", str);
}
private void refresh() {
final CheckBoxPreference checkPref = (CheckBoxPreference) findPreference(KEY_CHECK_PREFS);
checkPref.setOnPreferenceChangeListener(this);
final ListPreference listPref = (ListPreference) findPreference(KEY_LIST_PREFS);
listPref.setSummary(listPref.getEntry());
listPref.setOnPreferenceChangeListener(this);
}
}
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
import android.util.Log;
public class TestPreferenceActivity extends PreferenceActivity implements
Preference.OnPreferenceChangeListener {
private static final String KEY_CHECK_PREFS = "check_pref";
private static final String KEY_LIST_PREFS = "list_pref";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
}
@Override
protected void onResume() {
super.onResume();
refresh();
}
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
Preference preference) {
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
public boolean onPreferenceChange(Preference pref, Object newValue) {
p("pref: " + pref);
p("newValue: " + newValue);
return true;
}
private void p(String str) {
Log.i("chencc", str);
}
private void refresh() {
final CheckBoxPreference checkPref = (CheckBoxPreference) findPreference(KEY_CHECK_PREFS);
checkPref.setOnPreferenceChangeListener(this);
final ListPreference listPref = (ListPreference) findPreference(KEY_LIST_PREFS);
listPref.setSummary(listPref.getEntry());
listPref.setOnPreferenceChangeListener(this);
}
}
更多内容参考android.preference包。