Preference直译为偏好,博友建议翻译为首选项。一些配置数据,一些咱们上次点击选择的内容,咱们但愿在下次应用调起的时候依然有效,无须用户再一次进行配置或选择。Android提供preference这个键值对的方式来处理这种状况,自动保存这些数据,并立时生效,同时Android提供一种相似的layout的方式来进行Prefernce的布局。java
一个简单的Preferenece例子android
步骤1:编写preference XML,在res/xml/下加入咱们的preference XML文件,例如名字叫c21preference.xml编程
<?xml version="1.0" encoding="utf-8"?>
<!-- preference的组织方式有PreferenceScreen和PreferenceCategory,PreferenceCategory是带层次组织关系,在后面的例子体验,而PreferenceScreen就是最平白和基础的方式 -->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 有四个基本组建,这个例子学习两个。里面的内容对照图,很容易理解,RingtonePreference是选择铃音,这里给出两个选择,系统默认的铃音和无声 -->
<CheckBoxPreference android:key="checkbox"
android:title="CheckBox Preference"
android:summary="Check it on , check it off"/>
<RingtonePreference android:key="ringtone"
android:title="Ringtone Preference"
android:showDefault="true"
android:showSilent="true"
android:summary="Pick a tone, any tone"/>
</PreferenceScreen>架构
步骤2:在java源代码中调用该xml,生成相应的preference界面app
public class Chapter21Test1 extendsPreferenceActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.c21preference);
}
}ide
![]() |
![]() |
和用layout方式同样,代码很简单。和以往界面最大的区别是,咱们对checkbox进行选择或者对ringtone进行选择后,这个选择结果是被保留的,当咱们退出actitvity后再次进入,上次的选项依然保留,咱们从新向模拟器load应用,发现以前的选项仍然存在。咱们能够利用preference,而无须人工对数据进行保存和读取,非常方便。布局
步骤3:获取preference的数据学习
处了在preference的界面中能够保留数据,咱们也但愿可以读出数据,以便这些数据能够用在其余的activity中。若是另外一个activity和这些数据关联,并且但愿可以实时进行同步,在onResume()中对preference保留的数据进行读取,然后进行相关的更新。this
首先要获取preferences,而后经过键值对的获取方式根据key获取数值,在xml中checkbox的key为“checkbox”,值的类型为布尔值,而rintong的值为String,例如:spa
protected void onResume() { //在另外一个Activity中
super.onResume();
SharedPreferences prefs =PreferenceManager.getDefaultSharedPreferences(this) ;
System.out.println(new Boolean(prefs.getBoolean("checkbox",false)).toString());//false表示没有查到checkbox这个key的返回值
System.out.println(prefs.getString("ringtone","<unset>"));//<unset>表示没有查到ringtong这个key的返回值
}
获取preferences能够经过三种方式:
1、getPreferences():能够获取同一activity中的preference;
2、getSharedPreferences():能够获取映用级别的preferences(),在这个例子中因为咱们封装在同一app中,也可使用SharePreferences prefs = getSharedPreferences( "com.wei.android.learning_preferences" ,0);其中第一个参数name的格式是<package_name>_preferences;
3、getDefaultSharedPreferences():就是咱们例子的方式,经过Android的偏好管理器来获取其所管理的preferences。
Preferenece数据的操做
在上面的例子中,preference的数值会被保留,并且能够在其余的activity中读取。若是须要清除数据,能够经过remove()清除某个名字的prefernece,clear()清除全部的preferences。咱们能够经过edit()获取preferences的editor,进而进行编辑,修改后,经过commit()将修改值保存。
Preferenece XML
Preference的XML能够经过PreferenceCategory来进行组织。PreferenceCategory能够将几个组建组合在一块儿,并加上标题。咱们依然用前面的xml例子,经过PreferenceCategory来进行组织,以下:和以前的例子比较,将chekcbox和rintong组织成为一个category,并加上了"simple Preferences"的标题。
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="Simple Preferences">
<CheckBoxPreference android:key="checkbox" ..../>
<RingtonePreference android:key="ringtone" ... />
</PreferenceCategory>
</PreferenceScreen>
PreferenceCategory也能够嵌套PreferenceScreen,PreferenceScreen中的内容,将经过另外一屏来显示,咱们在上面例子后面添加一个嵌套了PreferenceScreen的PreferenceCategory。整个PreferenceScreen做为一个组件出现,点击后新的一屏,由入PreferenceScreen定义。经过这个关系,咱们能够组织本身的preference架构。
<?xml version="1.0" encoding="utf-8"?> |
![]() |
![]() |
在前面的例子中咱们使用了CheckBox和Ringtong,在下面的例子,咱们实验另外的两个组建EditText和List,这两种都是已弹框的方式。在上面的例子咱们继续增长内容
<?xml version="1.0" encoding="utf-8"?> |
在list中由两个引用@array/cities和@array/airport_codes,咱们在资源文件中定义此两array。内容以下: |
运行结果如右图所示。对于EditText,键值对保存的值是String,即用户在输入框中输入的内容。List的状况稍微复杂一些,在设置ListPreference的属性有一个entires,这是在List显示给用户看的内容,若是咱们去获取preference的值,在这个例子为prefs.getString("list", "<unset>");,则返回在entryValues对应的数值,例如咱们选择了第一个item:Pittsburgh,则获取的值为PHL。entries和entryValues是一一对应的。
相关连接: 个人Android开发相关文章