Android:Preference

在Android源码的中,很多UI布局采用了Preference的布局方式。Preference的布局与view的布局基本相似,其布局文件位于res/xml中。在Preference中,包括PreferenceScreen和PreferenceCategory最重要的基本组合组件,它们是PreferenceGoup的子类。
PreferenceScreen是表示Preference的根节点,可以将包括Preference及其子类的组件组合起来,类似于ListView的方式来组合分布。   
Preferencecategory则类似于LinearLayout等layout布局,用于组合Preference及其子类组件。

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

    

第二种,利用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);
    }

 

你可能感兴趣的:(Android)