preference
在Android源码的中,很多UI布局采用了Preference的布局方式。Preference的布局与view的布局基本相似,其布局文件位于res/xml中。在Preference中,包括preferencescreen和preferencecategory最重要的基本组合组件,它们是PreferenceGoup的子类。
PreferenceScreen是表示Preference的根节点,可以将包括Preference及其子类的组件组合起来,类似于listview的方式来组合分布。
Preferencecategory则类似于Linearlayout等layout布局,用于组合Preference及其子类组件。
PreferenceScreen的示例:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="主界面">
<PreferenceScreen
android:title="第一行"
android:key="one_row"
android:summary="第一行小标题"/>
<Preference
android:key="two_row"
android:title="第二行" />
<listpreference
android:key="three_row"
android:title="第三行"
android:dialogTitle="第三行的对话框"
android:entries="@array/preferred_network_mode_choices"
android:entryValues="@array/preferred_network_mode_values"/>
</PreferenceScreen>
---
关于Preference的通用xml Attribute说明:
**android:key** : 类似于view的ID,表示Preference控件唯一的ID号
**android:defaultValue** :默认值,如果在持久化存储中没有找到相应的首选项,即设置为默认值
**android:enabled** : 表示Preference是否处于可选状态
**android:title** :Preference的标题,Preference第一行显示的标题内容
**android: summary** :prefercnce的副标题,Preference第二行像是的小标题内容
**android:persistent** :是否将Preference的值写入到sharedPreference中,若为true,即写入
**android:dependency** :表该Preference依赖的其它Preference,如手机的信号就依赖于飞行模式
**android:disdependency** :表两个Preference是互斥的关系
**android:fragment** :用于单击跳转
---
ListPreference 继承了DialogPreference,所以其也继承了继承了DialogPreference的不少特性。
**android:dialogtitle** :当单击该Preference时,将跳出一个Dialog对象,其标题即为该string
**android:entries** :类型是array,控件可以显示的内容,即用户可以直接看到的 ,比如,设置了**android:dialogtitle**,即其在dialog界面显示
**android:entryValues** :与android:entries组合起来类似于Map(key— value),其主要用于SharedPreference保存的值(android:entries,android:entryValues)
---
在java文件中,加载xml文件。
protected void onCreate(Bundle savedinstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference);
}
此时组件已经全部加载,如若希望加载部分组件,即可以采用获取PreferenceScreen根对象,然后再加载的办法。
PreferenceScreen pst = getPreferenceScreen();
pst.removeAll(); //清空所有组件元素
PreferenceScreen preferenceScreen_one= (PreferenceScreen) pst.findPreference(KEY_ONE_ROW); //获得组件对象
Preference preference_two=pst.findPreference(KEY_TWO_ROW);
ListPreference listPst_three= (ListPreference) pst.findPreference(KEY_THREE_ROW);
pst.addPreference(preferenceScreen_one);//为pst添加组件元素
pst.addPreference(preference_two);
pst.addPreference(listPst_three);
同时,如果PreferenceScreen或PreferenceCategory下嵌套PreferenceScreen,嵌套下的PreferenceCreen中嵌套的内容将在第二屏显示,而不是直接显示在当前屏幕中。若嵌套下的PreferenceScreen没有嵌套内容,只有其本身,即在当前屏幕显示。即嵌套下PreferenceScreen,其本身会在当前屏幕显示,其内容将在单击PreferenceScreen组件后在其他屏幕显示。
---
关于Preference的跳转,其主要有三个方式可以实现。
第一种 利用其属性android:fragment来处理。
<PreferenceScreen
android:key="WiFi_calling_settings"
android:title="@string/wifi_calling_settings_title"
settings:keywords="@string/keywords_wifi_calling"
android:fragment="com.android.settings.WifiCallingSettings" />
第二种,利用intent来处理
<PreferenceScreen
android:key="mobile_network_settings"
android:title="@string/network_settings_title"
settings:keywords="@string/keywords_more_mobile_networks"
android:dependency="toggle_airplane">
<intent
android:action="android.intent.action.MAIN"
android:targetPackage="com.android.phone"
android:targetClass="com.android.phone.MobileNetworkSettings" />
</PreferenceScreen>
第三种,第二种可以采用onPreferenceTreeClick()创建新的intent显示的进行跳转。
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
log("onPreferenceTreeClick: preference=" + preference);
if (preference == mAirplaneModePreference && Boolean.parseBoolean(
SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE))) {
startActivityForResult(
new Intent(TelephonyIntents.ACTION_SHOW_notice_ECM_BLOCK_OTHERS, null),
request_CODE_EXIT_ECM);
return true;
} else if (preference == findPreference(KEY_MANAGE_MOBILE_PLAN)) {
onManageMobilePlanClick();
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
相关阅读
DialogPreference共性 DialogPreference通用属性 说明 android:dialogIco 对话框的icon android:dialogLayout dialog
android开发之PreferenceScreen使用详解
是在惭愧,学习android也有一段时间了,今天才是第一次接触PreferenceScreen。记录下来,与大家分享。 本文参考:http://lovezhou.iteye.
在上篇文章中我们讲述了Android 5.1 Settings的源码解析http://blog.csdn.net/dongxianfei/article/details/51979922, 其中在介绍
android开发之PreferenceScreen使用详解
一 PreferenceActivity1、PreferenceActivity概述PreferenceActivity是一个抽象类,继承于ListActivity,以列表形式视图来展现界面,
Pro Android学习笔记(五七):Preferences(1):ListPreference
Adnroid提供Preferences framework,用户可定制化应用,可用来保存信息和状态。在Android学习笔记(四十):Preference的使用中我已经对pre