安卓Preference详解 - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 技术分享 >

安卓Preference详解

发表时间:2020-10-19

发布人:葵宇科技

浏览次数:201


Preference 用来治理应用法度榜样的偏好设置和包管应用这些的每个应用法度榜样的所有参数 拥有同样的方法和用户体验   并且体系和其他应用法度榜样的UI保持偏一致。
一个应用法度榜样的偏好部分应作为一个自力的晃荡扩大preferenceactivity类 类中的对象应当是preferencescreen ,preferencescreen包含偏好等元素的构造的根元素 比如checkboxpreference EditTextPreferenceListPreferencePreferenceCategoryRingtonePreference.

对于一个给定的偏好设置将主动保存到SharedPreferences , 拿到SharedPreferences应用实例的很简单getsharedpreferences();值的留意的是保存首选项只能由创建的应用法度榜样去操作。
一般设置对应的UI如图
[img]http://img.blog.csdn.net/20150105225901589?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2s3MTk4ODc5MTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center



android 3.0以下版本,必须应用PreferenceActivity类来构建。  高于或等于android 3.0版本 应用PreferenceFragment。当然设备屏幕如不雅足够大年夜的话照样可以应用PreferenceActivity创建双面板构造来显示多组设置
安卓给我们供给了一下接口:

Preference.OnPreferenceChangeListener

接口定义一个回调时调用的值Preference由用户改变了,是吗 关于设置和/或持久化。

Preference.OnPreferenceClickListener

接口定义一个回调时被调用Preference是 点击。

PreferenceManager.OnActivityDestroyListener

接口定义一个类时,将调用容器的晃荡 被摧毁。

PreferenceManager.OnActivityResultListener

接口定义一个类时,将调用容器的晃荡 接收到一个晃荡的结不雅。

PreferenceManager.OnActivityStopListener

接口定义一个类时,将调用容器的晃荡 是停止了。
也定义了如下api:

CheckBoxPreference

一个Preference供给checkbox小部件 功能。

DialogPreference

一个基类Preference对象 基于对话框的。

EditTextPreference

一个Preference许可字符串 输入。

ListPreference

一个Preference显示条目标列表 一个对话框。

Preference

代表的根本UI构建的偏好 块显示的PreferenceActivity的情势ListView。

Preference.BaseSavedState

一个基类来治理实例的状况Preference。

preferenceactivity

显示了一个层次Preference对象作为 列表,可能跨越多个屏幕。

PreferenceCategory

用于集团Preference对象 并供给一个残疾人标题膳绫擎。

PreferenceGroup

一个容器为多个Preference对象。

PreferenceManager

用于赞助创建Preference层次构造 大年夜晃荡或XML。

PreferenceScreen

代表一个顶级Preference那 是优先的层次构造的根。

RingtonePreference

一个Preference许可用户选择大年夜这些设毕喔赡铃声。

1 Preference 可实现的接口
 interfacePreference.OnPreferenceChangeListener(偏好值已更改的用户和改变的时刻 调用) Preference.OnPreferenceClickListener(偏好设置被点击的时刻调用 )

装载请标明出处::http://blog.csdn.net/sk719887916

2.Preference元素的通用XML Attributes:    


android:key :      key:独一标识,SharedPreferences也精晓过此Key值进行数据保存,也可以经由过程key值获取保存的信息 。          
android:defaultValue : 默认值。 例如,CheckPreference的默认值可为”true”,默认为选中状况。
android:enabled :      表示该Preference是否可用状况。     
android:title :              每个Preference在PreferenceScreen构造上显示的标题——大年夜标题  
android:summary :      每个Preference在PreferenceScreen构造上显示的标题——小标题(可以没有)
android:persistent:    表示Preference元素所对应的值是否写入sharedPreferen文件中,如不雅是true,则表示写入;不然,则表示不写入该Preference元素的值。
android:layout:         在一个preferenceactivity的偏好构造 用于填充view
android:dependency:    表示一个Preference(用A表示)的可用状况依附别的一个Preference(用B表示)。B可用,
                                              则A可用;B弗采取,则A弗采取。
android:icon:    偏好搁笔    对于偏浩揭捉择搁笔必须是一个引用到另一个资本的情势或以packagetypename 主题属性.
android:disableDependentsState:  与android:dependency相反。B可用,则A弗采取;B弗采取,则A可用。
android:order:表示偏好次序,对于偏好较低的值的次序是先点如不雅不指定默认的排序将字母必须是一个整数,如100,这也可能是一个参考值在含有这类这相当于全局属性资本符号秩序的情势或 情势packagetypename主题属性的一个资本。

android:shouldDisableView:是否被禁用,这种偏好是必须是布尔值true或false 这也可能是一个参考的情势或主题属性packagetypename资本,packagetypename情势包含一个值   相当于全局属性资本符号shoulddisableview相干办法

android:selectable:偏好是否是可选的。

android:widgetLayout:可以做小清晨件部分的构造。
android:fragment:  应用时,可以碎片化PreferenceActivity。

3.显示Preference构造构造的办法为:


           使我们的Activity持续PreferenceActivity,然后在onCreate()办法中经由过程   
      addPreferencesFromResource(R.xml.custom_preference) (我们自定义的Preference 构造)。
      怎么样,是不是似曾了解?稍后会用一个Demo来为您胪陈。
 
   常用的方轨则包含:
                getKey()            setKey()
             getSummary()        setSummary()
             getText()           setText()
      getXXX()代表取得xxx属性的值。
  一个简略单纯的效不雅图如下:
     [img]http://img.blog.csdn.net/20150105232642680?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2s3MTk4ODc5MTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
 

4.Preference的跳转:


     办法一:在设备每个Preference元素节点时,我们可以显示为点击它时所跳转的Intent。点击该Preference,跳转至目标Intent。除非在onPreferenceTreeClick()办法中进行决定。在xml中设备如下:
</pre><pre name="code" class="java" style="font-size: 14px; color: rgb(34, 34, 34);">1.<Preference android:key="wifi_setting" android:title="Wi-Fi设置"  
2.    android:summary="设置和治理无线接入点" android:dependency="apply_wifi">  
3.    <!-- 点击时 自定义一个默认跳转Intent  action指定隐式Intent -->  
4.    <!-- action指定隐式Intent ; targetPackage和targetClass指定显示Intent-->  
5.    <intent android:action="com.feixun.action.seemAction"   
6.        android:targetPackage="com.feixun.qin" android:targetClass="com.feixun.qin.MainActivity" />  
7.</Preference>  

8. android:key 独一标识符。它对应保存的XML保存的设备文件中的节点的 name属性
9. android:defaultValue 默认值,对应XML中的Value属性的值。
10. 
     办法二:可以在onPreferenceTreeClick()创建新的intent显示的进行跳转。
 
  接下来,对每个Preference的的独有XML Attributes和办法进行一下总结,使大年夜家有更好的深刻懂得。
       1、EditPreference 
        可输入的设置项
            办法:
               getEditText()  返回的是我们在该控件中输入的文本框值
               getText()     返回的是我们之前sharedPreferen文件保存的值
            
                     
        2、ListPreference
         多选对话框设置项
          XML Attributes:
              android:dialogTitle:弹出控件对话框时显示的标题
              android:entries:类型为array,控件欲显示的文本
              android:entryValues:类型为array,与文本相对应的key-value键值对,value保存至sharedPreference文件
              解释:entries和entryValue属性应用的数组为定义在资本文件arrays.xml的数组名:
          办法:
              CharSequence[]    getEntries(): 返回的是控件显示文本的一个”key”数组,对应于属性android:entries
              CharSequence[]    getEntryValues():返回的一个”value”数组,对应于属性android: entryValues
              CharSequence      getEntry(): 返回当前选择文本
                String          getValue() :返回当前选中文本选中的value 。
       其实用法和对选对话框一致 只不过做了保存设置。
                                  
         采取的数组为:      
entries:列表中显示的值。为一个数组,通读经由过程资本文件进行设置。
entryValues:列表中实际保存的值,也entries对应。为一个数组,通读经由过程资本文件进行设置。以下代码显示的是arrays.xml文件中内容:
<resources>
<string-array name="department">
<item>春节</item>
<item>元旦</item>
<item>元宵</item>
</string-array>
<string-array name="department_value">
<item>001</item>
<item>002</item>
<item>003</item>
</string-array>
</resources>

   3 CheckBoxPreference
   可点击的设置项
  4  dialogPreference
    弹出一个对话框 用户选择肯定和撤消 
           
                 
 
 重点:分析Preference事宜
      以下摘自收集:
------------------------------------------------------------------------------------
   ★在PreferenceActivity办法中,一个比较重要的监听点击事宜办法为:
         public booleanonPreferenceTreeClick (PreferenceScreen preferenceScreen, Preference preference)
                           说 明 : 当Preference控件被点击时,触发该办法。
           参数解释: preference 点击的对象。
           返回值:   true  代表点击事宜已成功捕获,无须履行默认动作或者返回上层调用链。 例如,不跳转至默认Intent。
                 false 代表履行默认动作并且返回上层调用链。例如,跳转至默认Intent。
      在我们持续PreferenceActivity的Activity可以重写该办法,来完成我们对Preference事宜的捕获。
   
     信赖经由过程前面的介绍,你必定知道了若何应用了Preference家族并且对其触发办法。下面我们抛出别的两枚炸弹——
Preference相干的两个重要监听接口。
 
   ★  Preference.OnPreferenceChangeListener     该监听器的一个重要办法如下:
        boolean onPreferenceChange(Preference preference,Object objValue)
             解释:  当Preference的元素值发送改变时,触发该事宜。
             返回值:true  代表将新值写入sharedPreference文件中。
                     false 则不将新值写入sharedPreference文件
 
  ★   Preference.OnPreferenceClickListener      该监听器的一个重要办法如下:
         public booleanonPreferenceClick(Preference preference)
             解释:当点击控件时触发产生,可以做响应操作。
                             
    那么当一个Preference控件实现这两个接口时,当被点击或者值产生改变时,触发办法是若何履行的呢?事实上,
 它的触发规矩如下:
      1 先调用onPreferenceClick()办法,如不雅该办法返回true,则不再调用onPreferenceTreeClick办法 ;
       如不雅onPreferenceClick办法返回false,则持续调用onPreferenceTreeClick办法。
      2 onPreferenceChange的办法自力与其他两种办法的运行。也就是说,它老是会运行。
 
弥补:点击某个Preference控件后,会先回调onPreferenceChange()办法,等于否保存值,然后再回调onPreferenceClick以及onPreferenceTreeClick()办法,是以在onPreferenceClick/onPreferenceTreeClick
办法中我们获得的控件值就是最新的Preference控件值。
 
  那么,开端我们的拭魅战之旅吧! 下面给您最火热的┞方场。
    1,新建我们的preference.xml文件。
         ① 在res文件夹下,新建xml文件夹。
         ② 在新建的xml文件夹下,新建Android XML File。定名为mypeference.xml 。类型选择为Preference。
         ③ 打开我们的mypeference.xml,视图选择Structure。可以手动设备我们的构造文件。可选的Preference空间如下:
               
导出的xml文件:yourpageName"_prefenrences.xml
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<boolean name="Apply_wireless" value=http://www.sjsjw.com/100/000217MYM022474/"false" />


123@baidu.com


android.widget.EditText@41a45c00

------------------------------------------------------------------------------------------------------------------------------
 

二、PreferenceFragment


PreferenceFragment可以在一屏幕放上多个SharedPreferences片段。实现多屏构造显示 ,pad用的居多 效不雅如下。

[img]http://img.blog.csdn.net/20150105234203343?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2s3MTk4ODc5MTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center


 用于显示层次构造的偏好对象列表   这些列表的选项将主动保存到SharedPreferences作为与用户交互以检索实例,在该片段SharedPreferences偏好的层次构造用默认的 sharedpreferences去拿值。
此外所示的偏好将遵守体系偏好视觉风格很轻易创建一个层次构造光鲜的偏好,可以显示在多个屏幕上经由过程XML设备,因为这些原因,建议应用此片段作为一个父类的处理SharedPreferences。
PreferenceFragment偏好层次可以以多种方法形成。

@  大年夜XML文件中指定的层次构造
@ 大年夜不合的晃荡,可以指定本身的爱好 经由过程 XML文件的Activity meta-data中。
@年腋荷琐对象层次构造植根于preferencescreen.


应用addpreferences 参加要展示的xml, xml可以给根元素添加一个子元素,显示一个充斥屏幕的preferencescreen ,其xml可以如许写。


代码示例:
<PreferenceScreen
        xmlns:android="http://schemas.android.com/apk/res/android">

    <PreferenceCategory
            android:title="显示一排偏好">

        <CheckBoxPreference
                android:key="checkbox_preference"
                android:title="开关"
                android:summary="@string/summary_checkbox_preference" />

    </PreferenceCategory>

    <PreferenceCategory
            android:title="这是对画框偏好">

        <EditTextPreference
                android:key="edittext_preference"
                android:title="@string/title_edittext_preference"
                android:summary="@string/summary_edittext_preference"
                android:dialogTitle="@string/dialog_title_edittext_preference" />

        <ListPreference
                android:key="list_preference"
                android:title="@string/title_list_preference"
                android:summary="@string/summary_list_preference"
                android:entries="@array/entries_list_preference"
                android:entryValues="@array/entryvalues_list_preference"
                android:dialogTitle="@string/dialog_title_list_preference" />

    </PreferenceCategory>

    <PreferenceCategory
            android:title="@string/launch_preferences">

        <!--这个标签作为一个屏幕preferencescreen打破类似于分页符在字处理像其他偏好类型我们分派一个关键在这里可以或许很好的保存和恢复它的实例的状况. 就是所谓的同属一个一样的类别<pre name="code" class="java" style="color: rgb(34, 34, 34); font-size: 14px; line-height: 19px;"><span style="font-family: Roboto, sans-serif;">--></span>
<PreferenceScreen android:key="screen_preference" android:title="@string/title_screen_preference" android:summary="@string/summary_screen_preference"> <!-- 你可以定义更多的Preference,将鄙人一屏幕上显示. 点击的时刻这个类别会充斥屏幕 -->
<CheckBoxPreference android:key="next_screen_checkbox_preference" android:title="@string/title_next_screen_toggle_preference" android:summary="@string/summary_next_screen_toggle_preference" /> </PreferenceScreen> <PreferenceScreen android:title="@string/title_intent_preference" android:summary="@string/summary_intent_preference"> <intent android:action="android.intent.action.VIEW" android:data=http://www.sjsjw.com/100/000217MYM022474/"http://www.android.com" />
    <!-- 可以定义一个子sp 包含本身视觉风格和主题的  以下俩个子选项属于同一个类别-->
<CheckBoxPreference android:key="parent_checkbox_preference" android:title="@string/title_parent_preference" android:summary="@string/summary_parent_preference" /> <CheckBoxPreference android:key="child_checkbox_preference" android:dependency="parent_checkbox_preference" android:layout="?android:attr/preferenceLayoutChild" android:title="@string/title_child_preference" android:summary="@string/summary_child_preference" /> </PreferenceCategory></PreferenceScreen>


具体显示如图所示:
[img]http://img.blog.csdn.net/20150106000445806?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2s3MTk4ODc5MTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
java 代码可以如许写;
public static class PrefsFragment extends PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 加载构造
        addPreferencesFromResource(R.xml.preferences);
    }
}
包含如下几个办法:
1 要指定添加一个意图可以应用:

addPreferencesFromResource (int preferencesResId)


 2 每个意图可以指定清单中的元数据经由过程Key来获取子Preference    ,


Preference findPreference (CharSequence key)


3 获取根preferencescreen:

PreferenceScreen getPreferenceScreen ()


4 设置一个满屏的Preference

setPreferenceScreen (PreferenceScreen preferenceScreen)

其他生命会周期和activty的一模一样不做细说


3 PreferenceGroup


   

一种Preference的父类,如preferencecategory, preferencescreen 做基类容器。构造办法有以下三种,具体请看viewgroup的源代码 触类旁通,这里不做细说




public PreferenceGroup (Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)


Added in API level 21

public PreferenceGroup (Context context, AttributeSet attrs, int defStyleAttr)


Added in API level 1

public PreferenceGroup (Context context, AttributeSet attrs)



4 RingtonePreference
    作为铃声设置,(调用体系的铃声设置) 

              android:ringtoneType:响铃的铃声类型,重要有:ringtone(音乐)、notification(通知)、alarm(闹铃)(今后楼主为具体介绍alarm类)
                                      、all(所有可用声 音类型)。
               android:showDefault :默认铃声,可以应用体系(布尔值---true,false)的或者自定义的铃声
               android:showSilent  :指定铃声是否为静音。指定铃声包含体系默认铃声或者自定义的铃声

5 SwitchPreference


     类似阁下开关的设置项,可以作为一个滑动开关 
6  TwoStatePreference


有两个可选状况偏好合营基类 和SharedPreferences布尔值和可能相干的偏好,enabled 和disabled基于当前选中的状况来
经由过程这边文┞仿大年夜家可以大年夜概懂得了Preference,今后本身的应用法度榜样的设置页面可以采取安卓自带的Preference,不仅做到和系同一样ui体验,也能便利同一治理,并且包管参数情势一致。装载请标明出处:http://blog.csdn.net/sk719887916

相关案例查看更多