android基础–PreferenceActivity

android基础–PreferenceActivity1 PreferenceAc 介绍 nbsp nbsp nbsp nbsp nbsp PreferenceAc 继承 ListActivity 它是以一个列表的形式在展现内容 它最主要的特点是添加 Preference 可以让控件的状态持久化储存 举个例子比如用户选中 checkbox 后退出应用然后在进入应用 这时用户希望看到的是 checkbox 被选中 所以软件须要记录用户每次操作的过程并且持久储存

android基础--PreferenceActivity

1.PreferenceActivity 介绍  

        PreferenceActivity 继承ListActivity 它是以一个列表的形式在展现内容,它最主要的特点是添加Preference可以让控件的状态持久化储存,举个例子 比如用户选中checkbox后 退出应用然后在进入应用,这时用户希望看到的是checkbox被选中,所以软件须要记录用户每次操作的过程并且持久储存,在进入应用的时候须要判断这些久储存的数据然后将系统控件的状态呈现在UI中。
尤其是软件开发肯定会有一堆设置选项选项,每次进入Activity都去手动的去取储存的数据,这样代码会变得很复杂很麻烦。 这个时候Preference就出来了,它就是专门解决这些特殊的选项保存与读取的显示。用户每次操作事件它会及时的以键值对的形式记录在SharedPreferences中,Activity每次启动它会自动帮我们完成数据的读取以及UI的显示。
android开发中一共为我们提供了4个组件,分别是CheckBoxPreference组件、EditTextPreference组件、ListPreference组件、RingtonePreference组件,下面我用一个例子一一向同学们介绍一下。

2.CheckBoxPreference组件

CheckBoxPreference 选中为true 取消选中为false 它的值会以boolean的形式储存在SharedPreferences中。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

  xmlns:android=”http://schemas.android.com/apk/res/android”>

  

        android:title=”CheckBoxPreference”>

      

           android:key=”checkbox_0″

            android:title=”CheckBox_A”

            android:summary=”这是一个勾选框A” >

       

 

      

           android:key=”checkbox_1″

            android:title=”CheckBox_B”

            android:summary=”这是一个勾选框B” >

       

   

android基础--PreferenceActivity

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

import android.content.Context;

import android.os.Bundle;

import android.preference.CheckBoxPreference;

import android.preference.Preference;

import android.preference.PreferenceActivity;

import android.preference.Preference.OnPreferenceChangeListener;

import android.preference.Preference.OnPreferenceClickListener;

import android.widget.Toast;

 

public class CheckBoxActivity extends PreferenceActivity

{

    Context mContext = null;

    @Override

    protected void onCreate(Bundle savedInstanceState)

    {

        super.onCreate(savedInstanceState);

        // 从资源文件中添Preferences ,选择的值将会自动保存到SharePreferences

        addPreferencesFromResource(R.xml.checkbox);

        mContext = this;

 

        //CheckBoxPreference组件

        CheckBoxPreference mCheckbox0 = (CheckBoxPreference) findPreference(“checkbox_0”);

        mCheckbox0.setOnPreferenceClickListener(new OnPreferenceClickListener()

        {

            @Override

            public boolean onPreferenceClick(Preference preference)

            {

                //这里可以监听到这个CheckBox 的点击事件

                return true;

            }

        });

 

        mCheckbox0.setOnPreferenceChangeListener(new OnPreferenceChangeListener()

        {

            @Override

            public boolean onPreferenceChange(Preference arg0, Object newValue)

            {

                //这里可以监听到checkBox中值是否改变了

                //并且可以拿到新改变的值

                Toast.makeText(mContext, “checkBox_0改变的值为” +  (Boolean)newValue, Toast.LENGTH_LONG).show();

                return true;

            }

        });

 

        CheckBoxPreference mCheckbox1 = (CheckBoxPreference) findPreference(“checkbox_1”);

        mCheckbox1.setOnPreferenceClickListener(new OnPreferenceClickListener()

        {

            @Override

            public boolean onPreferenceClick(Preference preference)

            {

                //这里可以监听到这个CheckBox 的点击事件

                return true;

            }

        });

 

        mCheckbox1.setOnPreferenceChangeListener(new OnPreferenceChangeListener()

        {

            @Override

            public boolean onPreferenceChange(Preference arg0, Object newValue)

            {

                //这里可以监听到checkBox中值是否改变了

                //并且可以拿到新改变的值

                  Toast.makeText(mContext, “checkBox_1改变的值为” +  (Boolean)newValue, Toast.LENGTH_LONG).show();

                return true;

            }

        });

    }

}

 

3.EditTextPreference组件

EditTextPreference 点击后会弹出一个输入框,输入的内容会以字符串的的形式储存在SharedPreferences中。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

    xmlns:android=”http://schemas.android.com/apk/res/android”>

   

        android:title=”EditTextPreference”>

       

            android:key=”edit_0″

            android:title=”输入信息_A”

            android:summary=”请输入您的信息”

            android:defaultValue=”请输入信息”

            android:dialogTitle=”输入框”>

       

 

       

            android:key=”edit_1″

            android:title=”输入信息_B”

            android:summary=”请输入您的信息”

            android:defaultValue=”请输入信息”

            android:dialogTitle=”输入框”>

       

   

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

import android.content.Context;

import android.os.Bundle;

import android.preference.EditTextPreference;

import android.preference.PreferenceActivity;

 

public class EditTextActivity extends PreferenceActivity

{

    Context mContext = null;

 

    @Override

    protected void onCreate(Bundle savedInstanceState)

    {

        super.onCreate(savedInstanceState);

        // 从资源文件中添Preferences ,选择的值将会自动保存到SharePreferences

        addPreferencesFromResource(R.xml.edittext);

 

        mContext = this;

 

        // EditTextPreference组件

        EditTextPreference mEditText = (EditTextPreference) findPreference(“edit_0”);

 

        //设置dialog按钮信息

        mEditText.setPositiveButtonText(“确定”);

        mEditText.setNegativeButtonText(“取消”);

 

        //设置按钮图标

        mEditText.setDialogIcon(R.drawable.jay);

    }

}

 

4.ListPreference组件

在res/array中先写两个数组,一个用与list的显示内容,一个用户list的选中数值。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

   

       

10 mins.

       

20 mins.

       

30 mins.

       

60 mins.

   

 

   

       

       

       

       

   

 

ListPreference点击后会弹出一个列表框,选中后会将选中的内容(上面数组中的值)会以字符串的的形式储存在SharedPreferences中。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

   xmlns:android=”http://schemas.android.com/apk/res/android”>

  

    android:title=”ListPreference”>

   

        android:key=”list_0″

        android:title=”登录设置A”

        android:dialogTitle=”选择在线时间”

        android:entries=”@array/auto_logout_time_key”

        android:entryValues=”@array/auto_logout_time_value” >

   

 

   

        android:key=”list_0″

        android:title=”登录设置A”

        android:dialogTitle=”选择在线时间”

        android:entries=”@array/auto_logout_time_key”

        android:entryValues=”@array/auto_logout_time_value” >

   

 

android基础--PreferenceActivity

1

2

3

4

5

6

7

8

9

10

11

import android.os.Bundle;

import android.preference.PreferenceActivity;

 

public class ListActivity extends PreferenceActivity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        // 从资源文件中添Preferences ,选择的值将会自动保存到SharePreferences

        addPreferencesFromResource(R.xml.list);

    }

}

 

5.RingtonePreference组件

RingtonePreference点击后会弹出一个系统铃声的列表框,选中后会将选中的内容(uri字符集)会以字符串的的形式储存在SharedPreferences中。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

    xmlns:android=”http://schemas.android.com/apk/res/android”>

   

        android:title=”RingtonePreference”>

       

             android:key=”ringtone_0″

             android:summary=”选择系统铃声A”

             android:title=”铃声设置”

             android:ringtoneType=”all”

             android:showSilent=”true” >

       

 

       

             android:key=”ringtone_!”

             android:summary=”选择系统铃声B”

             android:title=”铃声设置”

             android:ringtoneType=”all”

            android:showSilent=”true” >

       

    

 

android:ringtoneType 系统一共提供了4中响铃模式的类型分别为  铃声(ringtone)  通知( notification) 警告(alarm) 全部(all)

模拟器默认是没有铃声的,下图中的铃声我是将歌曲文件拷贝到SD卡中,设置铃声后才会出现的。如果觉得拷贝麻烦可以使用豌豆荚或者91助手将歌曲文件放入手机SD卡中,在铃声设置那里设置一下在这里就会出现。

android基础--PreferenceActivity

1

2

3

4

5

6

7

8

9

10

11

import android.os.Bundle;

import android.preference.PreferenceActivity;

 

public class RingtoneActivity extends PreferenceActivity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        // 从资源文件中添Preferences ,选择的值将会自动保存到SharePreferences

        addPreferencesFromResource(R.xml.ringtone);

    }

}

 

5.自定义控件

使用系统的控件在显示方面难免会有些单一,如果想做一个好看的界面就需要使用自定义Preference。下面我简单说明一下如何编写自定义Preference。首先在res/layout中添加preferences文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

    android:layout_width=”match_parent”

    android:layout_height=”match_parent”

    android:background=”#00000000″>

   

        android:gravity=”center_vertical”

        android:background=”@drawable/preference_mid_background”

        android:layout_width=”match_parent”

        android:layout_height=”wrap_content”

        >

   

        android:focusable=”false”

        android:layout_width=”wrap_content”

        android:layout_height=”wrap_content”

        android:src=”@drawable/setting_about_us”>

   

   

        android:layout_width=”wrap_content”

        android:layout_height=”wrap_content”

        android:layout_marginLeft=”15dip”

        android:layout_marginTop=”6dip”

        android:layout_marginRight=”6dip”

        android:layout_marginBottom=”6dip”

        android:layout_weight=”1″

        >

       

            android:textSize=”15dip”

            android:textColor=”#000000″

            android:ellipsize=”marquee”

            android:id=”@+android:id/title”

            android:fadingEdge=”horizontal”

            android:layout_width=”wrap_content”

            android:layout_height=”wrap_content”

            android:singleLine=”true”

            >

       

       

            android:textAppearance=”?android:attr/textAppearanceSmall”

            android:textColor=”#”

            android:id=”@+android:id/summary”

            android:layout_width=”wrap_content”

            android:layout_height=”wrap_content”

            android:maxLines=”4″

            android:layout_below=”@+android:id/title”

            android:layout_alignLeft=”@+android:id/title”

            >

       

   

   

        android:focusable=”false”

        android:layout_width=”wrap_content”

        android:layout_height=”wrap_content”

        android:background=”@drawable/preference_arrows”/>

   

 

android:background=”@drawable/preference_mid_background”
通过这一行可以设置这个按钮的点击、选中默认的显示状态,这样可以让你的按钮更加好看。须要在res/drawable中添加xml文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

   

        android:state_focused=”true”

        android:drawable=”@drawable/preference_mid_pressed”

        >

   

   

        android:state_pressed=”true”

        android:drawable=”@drawable/preference_mid_pressed”

        >

   

   

        android:drawable=”@drawable/preference_mid”

        >

   

 

android基础--PreferenceActivity

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

import android.content.Context;

import android.os.Bundle;

import android.preference.Preference;

import android.preference.PreferenceActivity;

import android.preference.Preference.OnPreferenceClickListener;

import android.widget.Toast;

 

public class AllActivity extends PreferenceActivity

{

    /自定义布局A/

    Preference preference0 = null;

 

    /自定义布局B/

    Preference preference1 = null;

 

    Context mContext = null;

    @Override

    protected void onCreate(Bundle savedInstanceState)

    {

        super.onCreate(savedInstanceState);

        // 从资源文件中添Preferences ,选择的值将会自动保存到SharePreferences

        addPreferencesFromResource(R.xml.all);

        mContext = this;

 

        preference0 = findPreference(“pref_key_0”);

 

        preference0.setOnPreferenceClickListener(new OnPreferenceClickListener()

        {

            @Override

            public boolean onPreferenceClick(Preference preference)

            {

                  Toast.makeText(mContext, “自定义布局A被按下”, Toast.LENGTH_LONG).show();

                  return false;

            }

        });

        preference1 = findPreference(“pref_key_1”);

 

        preference1.setOnPreferenceClickListener(new OnPreferenceClickListener()

        {

            @Override

            public boolean onPreferenceClick(Preference preference)

            {

                  Toast.makeText(mContext, “自定义布局B被按下”, Toast.LENGTH_LONG).show();

                  return false;

            }

        });

    }

}

 

读取数据

在PreferenceActivity中可以用下面这种方式拿到SharedPreferences中储存的数值,通过PreferenceManager.getDefaultSharedPreferences(this) 方法拿到控件默认储存的sharedPreferences对象。

1

2

SharedPreferences prefs =PreferenceManager.getDefaultSharedPreferences(this) ;

boolean something = prefs.getBoolean(“something”,false);

 

在模拟起中将SharedPreferences储存内容拷贝出来后,可以清楚的看到通过点击系统控件储存的数值。这里我说一下铃声的储存,它是以一个字符串形式的uri字符集,它所指向的是系统铃声储存的路径。所以根据这个字符集就可以找到这个铃声。

1

2

3

4

5

6

7

8

9

10

11

12

   

content://media/external/audio/media/1

   

content://media/external/audio/media/1

   

   

请输入信息1212

   

   

content://settings/system/ringtone

   

   

   

请输入信息

 

 

下载地址:http://vdisk.weibo.com/s/aa3UT

 

  • 本文固定链接: https://www.xuanyusong.com/archives/155
  • 转载请注明: 雨松MOMO 2012年04月27日 于 雨松MOMO程序研究院 发表

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/177475.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午7:25
下一篇 2026年3月26日 下午7:26


相关推荐

  • 卡方分布、方差分析

    卡方分布:首先我们先把现代数学中的数理统计中的卡方分布已经烂大街的定义先放下来,我先回到卡方检验的诞生的之地。在1900年,皮尔森发表了著名的关于卡方检验的文章,该文章被认为是现代统计学的基石之一。在该文章中,皮尔森研究了拟合优度检验:……(这里之所以加点的原因是因为,下面的话很不好理解,我们举一个实际一点的例子就容易理解了。)下面图片有个赌场的色子(注意阅读下面红色字体)…

    2022年4月8日
    122
  • PyCharm Flask框架安装

    PyCharm Flask框架安装打开命名行窗口 执行下面命令 pipinstallfl pipinstallfl login pipinstallfl openid pipinstallfl sqlalchemy pipinstallsq migrate pipinstallfl whooshalche

    2025年8月31日
    4
  • MySQL主从复制常见故障及解决方法

    MySQL主从复制常见故障及解决方法

    2022年3月12日
    60
  • C中的继承(详解)

    C中的继承(详解)继承详解 一 继承的概念 二 基类和派生类 三 继承的作用 四 继承的特点 五 举例说明 六 继承注意事项 一 继承的概念 继承 是面向对象程序设计中最重要的概念之一 继承允许我们根据一个类来定义另一个类 这使得创建和维护应用程序变得更容易 同时也有利于重用代码和节省开发时间 当创建一个类时 不需要完全重新编写新的数据成员和成员函数 只需要设计一个新的类 继承了已有的类的成员即可 这个已有的类被称为的基类 父类 这个新的类被称为派生类 子类 二 基类和派生类 基类 父类 也可以理解成生活中的父亲

    2026年3月18日
    2
  • Manus邀请码最新申请指南,成功率高达95%!(免费领取)

    Manus邀请码最新申请指南,成功率高达95%!(免费领取)

    2026年3月15日
    2
  • WKT解读

    WKT-概念WKT(Well-knowntext)是一种文本标记语言,用于表示矢量几何对象、空间参照系统及空间参照系统之间的转换。它的二进制表示方式,亦即WKB(well-knownbinary)则胜于在传输和在数据库中存储相同的信息。该格式由开放地理空间联盟(OGC)制定。WKT-几何对象WKT可以表示的几何对象包括:点,线,多边形,TIN(不规则三角网)及多…

    2022年4月3日
    105

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号