天天看点

Android开发之PreferenceActivity .

今天我们来讲preferenceactivity的使用。我们先来认识一下它,看看它长什么样?呵呵,截图如下:

Android开发之PreferenceActivity .

看到没?这就是preferenceactivity.看起来蛮眼熟的,在哪见过。呵呵,对,在我们得模拟器“设置”—>“无线和网络”中,就使用了这个。呵呵,下面来跟据一个项目实例,来讲述它的具体应用。

1、  创建android项目,命名为preferenceactivity。

2、  在values目录下新建一个array.xml文件,以备下面程序使用,该文件代码如下:

view plaincopy to clipboardprint?

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

<resources>    

<string-array name="entries">    

    <item>test1</item>    

    <item>test2</item>    

    <item>test3</item>    

</string-array>    

<string-array name="entriesvalue">    

    <item>1</item>    

    <item>2</item>    

    <item>3</item>    

</resources>   

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

<resources>

<string-array name="entries">

<item>test1</item>

<item>test2</item>

<item>test3</item>

</string-array>

<string-array name="entriesvalue">

<item>1</item>

<item>2</item>

<item>3</item>

</resources>

3、  在res目录下新建一个xml目录,在里面新建一个preference.xml文件,该文件的具体内容如下:

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

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

    android:orientation="vertical"  

    android:layout_width="fill_parent"  

    android:layout_height="fill_parent"  

    >  

    <preferencecategory android:title="我的位置">  

       <checkboxpreference  

          android:key="first"  

          android:title="飞行模式"  

          android:defaultvalue="true"  

       />  

          android:key="second"  

          android:title="wi-fi"  

          android:summaryon="开启"  

          android:summaryoff="关闭"  

       <preference  

          android:key="third"  

          android:title="wi-fi设置"  

          android:summary="设置和管理无线接入点"  

       <listpreference  

          android:key="listpreference"  

          android:title="listpreference"  

          android:summary="listpreference测试"  

          android:dialogtitle="listpreference"  

          android:entries="@array/entries"  

          android:entryvalues="@array/entriesvalue"  

       <edittextpreference    

        android:key="edittextpreference"    

        android:title="edittextpreference"    

        android:summary="点击输入"    

        android:dialogtitle="输入设置"    

       />    

       <ringtonepreference    

        android:key="ringtonepreference"    

        android:title="ringtonepreference"    

        android:summary="选择铃声"    

       />   

    </preferencecategory>  

</preferencescreen>  

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

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<preferencecategory android:title="我的位置">

<checkboxpreference

android:key="first"

android:title="飞行模式"

android:defaultvalue="true"

/>

android:key="second"

android:title="wi-fi"

android:summaryon="开启"

android:summaryoff="关闭"

<preference

android:key="third"

android:title="wi-fi设置"

android:summary="设置和管理无线接入点"

<listpreference

android:key="listpreference"

android:title="listpreference"

android:summary="listpreference测试"

android:dialogtitle="listpreference"

android:entries="@array/entries"

android:entryvalues="@array/entriesvalue"

<edittextpreference

android:key="edittextpreference"

android:title="edittextpreference"

android:summary="点击输入"

android:dialogtitle="输入设置"

<ringtonepreference

android:key="ringtonepreference"

android:title="ringtonepreference"

android:summary="选择铃声"

</preferencecategory>

</preferencescreen>

4、  以上做好后,我们就只要修改程序中的部分代码了。首先,我们得让它继承自preferenceactivity的activity,然后在主程序中调用addpreferencesfromresource(r.xml.preference);就可以了。具体代码如下:

public class preferenceactivitytest extends preferenceactivity implements onsharedpreferencechangelistener{  

    sharedpreferences prefs;  

    listpreference listpreference;//声明listpreference  

    /** called when the activity is first created. */  

    @override  

    public void oncreate(bundle savedinstancestate) {  

        super.oncreate(savedinstancestate);  

        addpreferencesfromresource(r.xml.preference);  

        //我们可以通过各个preference的key来得到preference的view,从而可以用它进行相关操作  

        listpreference=(listpreference)findpreference("listpreference");  

        string str=listpreference.getkey();  

        system.out.println(str);  

        /*preferenceactivity中的设置存储是完全自动的,你不需要再用代码去实现  

         * 设置的存储,preferenceactivity创建后会自动创建一个配置文件/data/  

         * data/you_package_name/shared_prefs/you_package_name_you_xml_name.xml。  

         * 如果要获取该文件中的值,我们可以通过以下方式取得*/  

        prefs=preferencemanager.getdefaultsharedpreferences(this);  

        string value=prefs.getstring("listpreference", "xyz");  

        toast.maketext(this, value, toast.length_long).show();  

    }  

    public boolean onpreferencetreeclick(preferencescreen preferencescreen,  

            preference preference) {  

        // todo auto-generated method stub  

        if(preference.getkey().equals("third")){  

            //这里可以操作,实现界面的跳转  

             intent intent=new intent();  

             intent.setclass(this, runactivity.class);  

             startactivity(intent);  

        }  

        return super.onpreferencetreeclick(preferencescreen, preference);  

    //当选择或是输入不同的值时,他们的值会自动保存到sharedpreferences中,当值发生改变的时候会触发  

    public void onsharedpreferencechanged(sharedpreferences sharedpreferences,  

            string key) {  

}  

public class preferenceactivitytest extends preferenceactivity implements onsharedpreferencechangelistener{

sharedpreferences prefs;

listpreference listpreference;//声明listpreference

/** called when the activity is first created. */

@override

public void oncreate(bundle savedinstancestate) {

super.oncreate(savedinstancestate);

addpreferencesfromresource(r.xml.preference);

//我们可以通过各个preference的key来得到preference的view,从而可以用它进行相关操作

listpreference=(listpreference)findpreference("listpreference");

string str=listpreference.getkey();

system.out.println(str);

/*preferenceactivity中的设置存储是完全自动的,你不需要再用代码去实现

* 设置的存储,preferenceactivity创建后会自动创建一个配置文件/data/

* data/you_package_name/shared_prefs/you_package_name_you_xml_name.xml。

* 如果要获取该文件中的值,我们可以通过以下方式取得*/

prefs=preferencemanager.getdefaultsharedpreferences(this);

string value=prefs.getstring("listpreference", "xyz");

toast.maketext(this, value, toast.length_long).show();

}

public boolean onpreferencetreeclick(preferencescreen preferencescreen,

preference preference) {

// todo auto-generated method stub

if(preference.getkey().equals("third")){

//这里可以操作,实现界面的跳转

intent intent=new intent();

intent.setclass(this, runactivity.class);

startactivity(intent);

return super.onpreferencetreeclick(preferencescreen, preference);

//当选择或是输入不同的值时,他们的值会自动保存到sharedpreferences中,当值发生改变的时候会触发

public void onsharedpreferencechanged(sharedpreferences sharedpreferences,

string key) {

5、  到此我们得项目框架就已经搭建好了,单击执行便会得到我们以上的效果。

但是我们得任务还没完,下面的讲解才是本节的重点。学习preferenceactivity我们需要注意一下几点:

第一, preference下的view是有限的,只有下面几个:

checkboxpreference:checkbox选择项,对应的值的ture或flase

edittextpreference:输入编辑框,值为string类型,会弹出对话框供输入。

listpreference: 列表选择,弹出对话框供选择。

preference:只进行文本显示,需要与其他进行组合使用。

preferencecategory:用于分组。

ringtonepreference:系统玲声选择

第二,preferenceactivity布局中的一些属性。

android:key 唯一标识符。它对应保存的xml保存的配置文件中的节点的 name属性。android:defaultvalue 默认值,对应xml中的value属性的值。

android:title:显示标题(大字体显示)。

 android:summary:副标题(小字体显示)。

android:dialogtitle:弹出对话框的标题

android:entries:列表中显示的值。为一个数组,通读通过资源文件进行设置。

android:entryvalues:列表中实际保存的值,与entries对应。

第三,当preferenceactivity上的view有所更改时,系统会自动将对应的值更新到xml配置文件中,该文件可以在android 的 file explorer 中的 data/data/"yourpagename"/shared_prefs/"yourpagename"_prefenrences.xml中找到。“yourpagename”表示你项目所在的包。

第四,如何响应preferenceactivity操作。

其实,我们只要重写preferenceactivity的onpreferencetreeclick的方法就可以了,通过参数preference来判断是对那一个元素进行的,并根据需要进行操作。

到此,内容已经基本上剖析完全了。呵呵!