Android开发之PreferenceActivity .

 

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

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

1、  创建Android项目,命名为PreferenceActivity。

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

view plaincopy to clipboardprint?

  1. <?xml version="1.0" encoding="utf-8"?>    
  2. <resources>    
  3. <string-array name="entries">    
  4.     <item>test1</item>    
  5.     <item>test2</item>    
  6.     <item>test3</item>    
  7. </string-array>    
  8. <string-array name="entriesvalue">    
  9.     <item>1</item>    
  10.     <item>2</item>    
  11.     <item>3</item>    
  12. </string-array>    
  13. </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>
</string-array>
</resources>
3、  在res目录下新建一个xml目录,在里面新建一个preference.xml文件,该文件的具体内容如下:

view plaincopy to clipboardprint?

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7.     <PreferenceCategory android:title="我的位置">  
  8.        <CheckBoxPreference  
  9.           android:key="first"  
  10.           android:title="飞行模式"  
  11.           android:defaultValue="true"  
  12.        />  
  13.        <CheckBoxPreference  
  14.           android:key="second"  
  15.           android:title="Wi-Fi"  
  16.           android:summaryOn="开启"  
  17.           android:summaryOff="关闭"  
  18.           android:defaultValue="true"  
  19.        />  
  20.        <Preference  
  21.           android:key="third"  
  22.           android:title="Wi-Fi设置"  
  23.           android:summary="设置和管理无线接入点"  
  24.        />  
  25.        <ListPreference  
  26.           android:key="ListPreference"  
  27.           android:title="ListPreference"  
  28.           android:summary="ListPreference测试"  
  29.           android:dialogTitle="ListPreference"  
  30.           android:entries="@array/entries"  
  31.           android:entryValues="@array/entriesvalue"  
  32.        />  
  33.        <EditTextPreference    
  34.         android:key="EditTextPreference"    
  35.         android:title="EditTextPreference"    
  36.         android:summary="点击输入"    
  37.         android:dialogTitle="输入设置"    
  38.        />    
  39.        <RingtonePreference    
  40.         android:key="RingtonePreference"    
  41.         android:title="RingtonePreference"    
  42.         android:summary="选择铃声"    
  43.        />   
  44.     </PreferenceCategory>  
  45. </PreferenceScreen>  

<?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"
/>
<CheckBoxPreference
android:key="second"
android:title="Wi-Fi"
android:summaryOn="开启"
android:summaryOff="关闭"
android:defaultValue="true"
/>
<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);就可以了。具体代码如下:

view plaincopy to clipboardprint?

  1. public class PreferenceActivityTest extends PreferenceActivity implements OnSharedPreferenceChangeListener{  
  2.     SharedPreferences prefs;  
  3.     ListPreference listPreference;//声明ListPreference  
  4.     /** Called when the activity is first created. */  
  5.     @Override  
  6.     public void onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         addPreferencesFromResource(R.xml.preference);  
  9.         //我们可以通过各个preference的key来得到Preference的view,从而可以用它进行相关操作  
  10.         listPreference=(ListPreference)findPreference("ListPreference");  
  11.         String str=listPreference.getKey();  
  12.         System.out.println(str);  
  13.         /*PreferenceActivity中的设置存储是完全自动的,你不需要再用代码去实现  
  14.          * 设置的存储,PreferenceActivity创建后会自动创建一个配置文件/data/  
  15.          * data/you_package_name/shared_prefs/you_package_name_you_xml_name.xml。  
  16.          * 如果要获取该文件中的值,我们可以通过以下方式取得*/  
  17.         prefs=PreferenceManager.getDefaultSharedPreferences(this);  
  18.         String value=prefs.getString("ListPreference", "xyz");  
  19.         Toast.makeText(this, value, Toast.LENGTH_LONG).show();  
  20.     }  
  21.     @Override  
  22.     public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,  
  23.             Preference preference) {  
  24.         // TODO Auto-generated method stub  
  25.         if(preference.getKey().equals("third")){  
  26.             //这里可以操作,实现界面的跳转  
  27.              Intent intent=new Intent();  
  28.              intent.setClass(this, RunActivity.class);  
  29.              startActivity(intent);  
  30.         }  
  31.         return super.onPreferenceTreeClick(preferenceScreen, preference);  
  32.     }  
  33.     //当选择或是输入不同的值时,他们的值会自动保存到sharedpreferences中,当值发生改变的时候会触发  
  34.     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,  
  35.             String key) {  
  36.         // TODO Auto-generated method stub  
  37.           
  38.     }  
  39. }  

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();
}
@Override
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) {
// TODO Auto-generated method stub

}
}
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来判断是对那一个元素进行的,并根据需要进行操作。

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

时间: 2024-09-19 08:54:41

Android开发之PreferenceActivity .的相关文章

消息推送的问题-Android开发之bmob消息推送

问题描述 Android开发之bmob消息推送 bmob实现消息推送时,部分手机收不到什么鬼?不论是指定或是发送所有手机. 解决方案 你检查过那些手机是否有网络吗? 解决方案二: 看看官文文档 介绍 或者换极光推动 或者 友盟的推送 解决方案三: 只是个别手机有问题,说明通道应该没问题,检查手机环境,或者联系服务商咨询

Android 开发之BottomBar+ViewPager+Fragment实现炫酷的底部导航效果_Android

BottomBar BottomBar是Github上的一个开源框架,因为从1.3.3开始不支持fragments了,要自己配置,弄了很久,不管是app的fragment还是V4 的程序总是总是闪退.于是就用这种方式实现了,效果还不错.github有详细说明,多余的就不说了. 这个roughike是这个项目的所有者(大神致敬). 我用的是Android studio开发,fragment全部导的V4的包(以为最开始就支持的是v4的,后面也支持了app.fragment). 首先是dependen

Android开发之ViewSwitcher用法实例_Android

本文实例讲述了Android开发之ViewSwitcher用法.分享给大家供大家参考,具体如下: android.widget.ViewSwitcher是ViewAnimator的子类,用于在两个View之间切换,但每次只能显示一个View. ViewSwitcher的addView函数的代码如下: /** * {@inheritDoc} * * @throws IllegalStateException if this switcher already contains two childre

Android开发之Animations动画用法实例详解_Android

本文实例讲述了Android开发之Animations动画用法.分享给大家供大家参考,具体如下: 一.动画类型 Android的animation由四种类型组成:alpha.scale.translate.rotate XML配置文件中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转动画效果 Java Code代码中 AlphaAnimation 渐变透明度动画效果 ScaleAnimation 渐变尺寸

Android开发之旅:android架构

引言 通过前面两篇: Android 开发之旅:环境搭建及HelloWorld Android 开发之旅:HelloWorld项目的目录结构 我 们对android有了个大致的了解,知道如何搭建android的环境及简单地写一个HelloWorld程序,而且知道一个android项目包括哪 些文件夹和文件及相应的作用.本篇将站在顶级的高度--架构,来看android.我开篇就说了,这个系列适合0基础的人且我也是从0开始按照这个步骤来 学的,谈架构是不是有点螳臂挡车,自不量力呢?我觉得其实不然,如

Android开发之旅:应用程序基础及组件

--成功属于耐得住寂寞的人,接下来几篇将讲述Android应用程序的原理及术语,可能会比较枯燥.如果能够静下心来看,相信成功将属于你. 引言 为了后面的例子做准备,本篇及接下来几篇将介绍Android应用程序的原理及术语,这些也是作为一个Android的开发人员必须要了解,且深刻理解的东西.本篇的主题如下: 1.应用程序基础 2.应用程序组件 2.1.活动(Activities) 2.2.服务(Services) 2.3.广播接收者(Broadcast receivers) 2.4.内容提供者(

Android 开发之旅:短信的收发及在android模拟器之间实践(二)

引言 前面我们介绍都只是如何发送SMS消息,接下来我们介绍如何接收SMS消息,及另一种发短信的方式并增强为可以发生图片等,最后介绍一下emulator工具.本文的主要内容如下: 1~5见Android 开发之旅:短信的收发及在android模拟器之间实践(一) 6.温故知新之Intent 7.准备工作:SmsMessage类 8.SMS接收程序 9.另一种发送短信的方式:使用Intent 10.增强SMS为MMS 6.温故知新之Intent 此系列前面简单地接受过意图(Intent),这里再次简

Android 开发之旅:view的几种布局方式及实践

引言 通过前面两篇: Android 开发之旅:又见Hello World! Android 开发之旅:深入分析布局文件&又是"Hello World!" 我们对Android应用程序运行原理及布局文件可谓有了比较深刻的认识和理解,并且用"Hello World!"程序来实践证明了.在继续深入Android开发之旅之前,有必要解决前两篇中没有介绍的遗留问题:View的几种布局显示方法,以后就不会在针对布局方面做过多的介绍.View的布局显示方式有下面几种:线

Android开发之旅: Intents和Intent Filters(理论部分)

引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离, 并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义!Android应用程序也是一个沙盒,但是他们能够使用Intent. Broadcast Receivers.Adapters.Content Providers.Internet去突破他们的边界互相交流.有交流还会和谐,由此可见这些交流手段有多重要. 上篇文章中我们在 SMS接收程序和使用Int