转载自:http://my.oschina.net/helu/blog/141727
以前只知道Preference可以保存输入状态,类似于init.int配置文件的效果,今天发现个方法addPreferencesFromResource(R.xml.main);它的作用就是Preference本身
自带了一个界面,这个界面中的所有组件ListPreference、CheckBoxPreference、EditTextPreference、RingtonePreference等都自动带有保存输入值状态的功能。
它跟一般的自己写的activity界面相比,无非就是多了个Preference保存输入状态作用,但其界面扩展性不高,要想美化起来比较费劲。
要实现Preference界面效果,必须得继承PreferenceActivity,之后你可以选择自带Preference的组件有:
我们首先来看看ListPreference,听名字就知道是个列表:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
PreferenceScreen
xmlns:android
=
"http://schemas.android.com/apk/res/android"
>
<
ListPreference
android:key
=
"list"
android:summary
=
"请选择"
android:title
=
"列表"
/>
</
PreferenceScreen
>
/**
*
*@desc 这里的ListPreference都会保存你选择的状态,下次打开还是那个选择的值
*
*/
private ListPreference list = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference);
list = (ListPreference) findPreference("list");
list.setEntries(R.array.list);
list.setEntryValues(R.array.list);
//显示每次选择的值
list.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference p, Object value) {
list.setSummary(value.toString());
return true;
}
});
}
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
resources
>
<
string
name
=
"app_name"
>preferenceactivity</
string
>
<
string-array
name
=
"list"
>
<
item
>A</
item
>
<
item
>B</
item
>
<
item
>C</
item
>
<
item
>D</
item
>
</
string-array
>
</
resources
>
|
就得到这个效果:
其他的组件应用都差不多,多敲敲就熟悉了。
顺便说一下:
得到SharedPreferences时有三个方法:
1
2
3
|
1
、PreferenceManager.getDefaultSharedPreferences(context);
2
、getPreferences(mode);
3
、getSharedPreferences(name, mode);
|
看其源码,第一个方法实际上调用的就是第三个方法context.getSharedPreferences(getDefaultSharedPreferencesName(context),getDefaultSharedPreferencesMode()),
方法参数为getSharedPreferences(<package_name>_preferences,model),而getDefaultSharedPreferencesName(context)就是调用context.getPackageName() + "_preferences";及Preference功能范围在当前项目包下,超出此范围Preference功能
就无效了。
第二个方法Preference功能范围只在同一activity中的preference,如果你getPreferences(mode)方法不是和addPreferencesFromResource(R.xml.main)在同一个activity
中的话,Preference功能也是无效的。