必威体育Betway必威体育官网
当前位置:首页 > IT技术

Android:Preference

时间:2019-10-17 18:12:41来源:IT技术作者:seo实验室小编阅读:78次「手机版」
 

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);
    }

相关阅读

几种常见的Preference总结

DialogPreference共性 DialogPreference通用属性 说明 android:dialogIco 对话框的icon android:dialogLayout dialog

android开发之PreferenceScreen使用详解

是在惭愧,学习android也有一段时间了,今天才是第一次接触PreferenceScreen。记录下来,与大家分享。 本文参考:http://lovezhou.iteye.

PreferenceFragment详解

在上篇文章中我们讲述了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

分享到:

栏目导航

推荐阅读

热门阅读