Android Preference使用

Android Preference常用在例如设置的功能,Android提供preference这个键值对的方式来处理这种状况,自动保存这些数据,并立时生效,这种就是使用android sharedpreferences方式进行保存的,不须要咱们手动来写,下面的图片就是使用Preference来进行保存的android

 

 

 

 

 

添加一个简单的Preference数组

 

 

 

 

 

 

咱们在res目录下添加一个xml目录,里面添加一个itchq文件,这个文件至关于咱们的Preference布局文件ide

 

复制代码布局

<?xml version="1.0" encoding="utf-8"?>spa

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >xml

    

    <CheckBoxPreference 对象

        android:key="checkbox"继承

        android:title="CheckBoxPreference"接口

        android:summary="check it box"three

        />

    <RingtonePreference

        android:key="ring"

        android:title="ringtone"

        android:summary="check a ringtone"

        />

</PreferenceScreen>

复制代码

这个就是itchq.xml里面的代码,这里面的东西往下有介绍。咱们再来看看那个Activity里面如何使用的

 

复制代码

package com.itchq.itchqpreference;

import com.itchq.itchqpreference.R;

 

import android.os.Bundle;

import android.preference.CheckBoxPreference;

import android.preference.PreferenceActivity;

import android.preference.RingtonePreference;

 

 

public class ItChqActivity extends PreferenceActivity{

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        // TODO Auto-generated method stub

        super.onCreate(savedInstanceState);

        addPreferencesFromResource(R.xml.itchq);

    }

    

}

复制代码

上面的就是Activity的代码,这个Activity不是继承Activity这个类的而是PreferenceActivity,其实这个看字面的意思就是Activity的继承子类,用法和Activity差很少相同的,在Activity中使用setContentView()方法来加载一个布局文件,在这里使用的是addPreferencesFromResource()方法来加载布局文件,既然是Activity就不要忘记在AndroidManifast.xml添加相应的配置, 

 

 

 

 

 

  preference 通用的xml 布局属性

 

在preference布局文件中,咱们能够会常常用到下面的属性,这些属性都是preference控件相互通用的。

 

android:key                            这个属性至关于android:id的做用。用此key来惟一表示此Preference

 

android:title                            Preference的标题,

 

android:summary                   表示Preference提示语,相对于android:title来讲显示要小点,并且显示位置在android:title下面

 

android:defaultValue               这个表示的是默认值,好比CheclPreference这种preference就能够指定默认是"true"仍是“false”

 

android:enabled                      表示该Preference是否可用状态

 

PreferenceScreen

 

preferenceScreen简单的说就是全部Preference元素的根节点,咱们能够看作是每个PrederenceActivity布局的开始元素,固然这个PreferenceScreen也能够做为一个组件出现,里面能够嵌套其它组件,那么这个将会以另外的一屏显示出来,就是当咱们点击后出现一个新的屏幕

 

 

 

复制代码

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    

    <CheckBoxPreference 

        android:key="checkbox"

        android:title="CheckBoxPreference"

        android:summary="check it box"

        />

    <RingtonePreference

        android:key="ring"

        android:title="ringtone"

        android:summary="check a ringtone"

        />

    <PreferenceScreen 

        android:key="screen"

        android:title="PreferenceScreen"

        android:summary="screen it"

        >

        <SwitchPreference

            android:key="switch"

            android:title="switchPreference"

            android:summary="switch it"

            />

        <EditTextPreference

            android:key="edit"

            android:title="editPreference"

            android:summary="OK"

            />

    </PreferenceScreen>

</PreferenceScreen>

复制代码

 

 

如上面的代码里面有一个PreferenceScreen,这个PreferenceScreen里面嵌套了SwitchPreference和EditTextPreference,android:key至关android:id,咱们到时候经过这个在Activity中找到对应的组件,android:title就是标题,android:summary就是这个一个提示语,这三个属性都是最基本的信息,看下图:

 

 

 

上面图片中最后一项就是咱们添加的,“PreferenceScreen”就是咱们的android:title,“screen it”就是这个android:summary,那么当咱们点击这个选项时就会跳转到一个新的页面,页面显示以下图:

 

 

 

这个就是上面的在PreferenceScreen中嵌套的两个组件,SwitchPreference和EditTextPreference

 

 

 

PreferenceCategory

 

PreferenceCategory 这个控件相似于LinearLayou、RelativeLayout,用于组合一组Preference,使布局看起来具备层次关系,美观

 

 

 

复制代码

    <PreferenceCategory 

        android:key="category"

        android:title="PreferenceCategory"

        >

         <EditTextPreference

            android:key="edit"

            android:title="category"

            android:summary="OK"

            />

    </PreferenceCategory>

复制代码

 

 

 

 

如上图中Category前面有一天很大的线,这个就是使用了PreferenceCategory效果。

 

 

 

Preference这个控件这里简单介绍一下,这个就和咱们的TextView是同样的,就是显示一个文本

 

 

 

ListPreference

 

ListPreference这个就是显示一个至关的list,先看下面的代码

 

 

 

复制代码

    <ListPreference 

        android:key="list"

        android:title="Options"

        android:entries="@array/entry_list"                    

        android:entryValues="@array/values_list"

        android:dialogTitle="list dialogtitle"

        android:defaultValue="1"

        />

复制代码

 

 

咱们能够看到在这个代码中android:entries属性表示的就是这个listView对话框控件欲显示的文本,android:entryValues与文本相对应的key-value键值对,value保存至sharedPreference文件,而咱们的entries和entryValue属性使用的数组定义在资源文件arrays.xml的数组名,咱们来看看arrays.xml文件的定义

 

复制代码

<resources>

    

    <string-array name="entry_list">

        <item>total</item>

        <item>check</item>

        <item>airplace</item>

    </string-array>

    <string-array name="values_list">

        <item>0</item>

        <item>1</item>

        <item>2</item>

    </string-array>

</resources>

复制代码

这个就是arrays.xml文件的定义,android:dialogTitle是指这个list弹出框的文本,android:defauleValues表示在缺省条件下显示哪一个值,这个值对应的是values_list的值,咱们先来看看效果

 

 

 

如图这个Options就是咱们要ListPreference,当咱们点击这个以后显示效果以下图:

 

 

 

 

 

看到了把,咱们的这个dialog形式来显示listView的,默认android:defaultValues=“1”就是对应第二个"check",这个标题就是android:dialogTitle设置的

 

CheckBoxPreference

 

checkBoxPreference这个至关于checkBox,是一个多选,先看代码

 

 

 

复制代码

    <CheckBoxPreference 

        android:key="checkbox_one"

        android:title="checbox_one"

        android:summaryOn="On_check_one"

        android:summaryOff="offcheck_one"

        />

    <CheckBoxPreference

        android:key="checkbox_two"

        android:summaryOff="offcheck_two"

        android:summaryOn="On_check_two"

        android:title="checbox_two" />

    <CheckBoxPreference

        android:key="checkbox_three"

        android:summaryOff="offcheck_three"

        android:summaryOn="On_check_three"

        android:title="checbox_three" />

复制代码

android:summaryOn和android:summaryOff表示在选择和不选择分别显示的summary,运行效果图以下:

 

 

 

当咱们选择checkbox_one是下面的offcheck_one提示就会修改成On_check_one

 

EditTextPreference

 

等同于EditText,相关的代码显示以下:

 

 

 

    <EditTextPreference android:key="edit"

       android:title="Set Package Name"

        android:summary="Set the Package Name"

        android:dialogTitle="Package Name:" /> 

 

 

 

 

当咱们点击下面的“Set Package Name“的时候就会弹出这么一个文本对话框,”Package Name“就是这个android:dialogTitle的属性

 

RingtonePreference

 

这个是一个铃声选项的功能,用得比较少不作介绍

 

MultiSelectListPreference

 

它的实现和ListPreference类似,不一样的是还能够不选择或者多个选择,代码是和ListPreference同样的,运行效果以下图:

 

 

 

从上面一些基本的Preference控件已经差很少介绍完了,下面再来介绍一个有关于点击和存储的功能使用:

 

首先来介绍一下如何在咱们的PreferenceActivity中找到咱们的控件,咱们在Activity是经过findViewById()来找到咱们指定的控件的,那么在PreferenceActivity中咱们可使用findPreference这个方法来找到指定的方法,用法以下:

 

        mCheck=(CheckBoxPreference) findPreference("checkbox");

        mRing=(RingtonePreference) findPreference("ring");

findPreference里面的参数就是咱们使用android:key所定义的,这个应该容易理解。

 

在PreferenceActivity方法中,一个比较重要的监听点击事件方法为

 

 

 

复制代码

    @Override

    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,

            Preference preference) {

        // TODO Auto-generated method stub

        

        return true;

    }

复制代码

 

 

参数 preference   表示的是点击的对象,在咱们继承PreferenceActivity能够重写该方法,来完成咱们对Preference事件的捕捉,用法以下

 

复制代码

    @Override

    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,

            Preference preference) {

        // TODO Auto-generated method stub

        if(preference.getKey().equals("checkbox")){

            Log.i("itchq", "checkbox");

        }

        return true;

    }

复制代码

除了上面这个监听的方法以外,还有两个重要的接口:

 

OnPreferenceChangeListener

 

当Preference的元素值发送改变时,触发该事件,记住只有元素值改变才会触发这个值,返回值为true 表示将新值写入sharedPreference文件中

 

false 则不将新值写入sharedPreference文件

 

 

 

    @Override

    public boolean onPreferenceChange(Preference preference, Object newValue) {

        // TODO Auto-generated method stub

        return false;

    }

 

 

OnPreferenceClickListener

 

当点击控件时触发发生,能够作相应操做

 

    @Override

    public boolean onPreferenceClick(Preference preference) {

        // TODO Auto-generated method stub

        return false;

    }

 

 

那么这三个点击事件在一块儿是什么用的呢?它的规则以下:

 

点击某个Preference控件后,会先回调onPreferenceChange()方法,便是否保存值(这个下面会讲解这个值是如何保存的),而后再回调onPreferenceClick以及onPreferenceTreeClick()方法,所以在onPreferenceClick/onPreferenceTreeClick方法中咱们获得的控件值就是最新的Preference控件值。而后onPreferenceClick会比onPreferenceTreeClick()方法先调用,若是onPreferenceClick方法返回true,那就不会再调用onPreferenceTreeClick()方法,若是onPreferenceClick()返回false就会继续调用onPreferenceTreeClick()方法

相关文章
相关标签/搜索