在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"?>            

---

关于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来处理。
 

    

第二种,利用Intent来处理

                


第三种,第二种可以采用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);    }

 

更多相关文章

  1. Android官方架构组件LifeCycle详解
  2. ScrollView嵌套RecyclerView出现item显示不全的问题
  3. android RecyclerView 中添加 FooterView 和 DividerItemDecorat
  4. AdapterViewFlipper实现跑马灯横幅广告滚动效果
  5. android UI入门二 定义图片横竖屏切换正确显示
  6. Android(安卓)启动程序时动画效果(渐变)
  7. android 桌面小组件小记
  8. Android学习笔记八:基本视图组件:CheckBox
  9. 垮平台开发平台

随机推荐

  1. android中MediaPlayer的用法
  2. 原:Android(安卓)获取屏幕高度、标题高度
  3. Android使用AchartEngine绘制曲线图
  4. android:TextAppearance.Material.Widget
  5. Android(安卓)Weak Handler:可以避免内存
  6. Android自定义样式
  7. android情景模式切换的实现
  8. Android的BUG(三) - 广为人知的诟病:频繁重
  9. eclipse android基础开发
  10. android gps开发必备资料(含测试demo下载