安卓之PreferenceActivity分享

PerferenceActivity是什么,看下面的截图:

          

Android的系统截图

               乐手设置截图

         好了,我们看到Android系统本身就大量用到了PreferenceActivity来对系统进行信息配置和管理,那么它是怎么保存数据的呢,如何创建PrefenceActivity的呢,更关键是怎样触发相应事件的呢。

         PreferenceActivity设置的值。

 

         第二个问题:。如何创建一个PreferenceActivity其实Eclipse中提供了相应的创建工具,和创建布局是基本相同的步骤如下:

        创建的Andr​​oid项目,并添加一个Android的XML文件。注意,这次选择的不是版式,而是偏好,而且注意文件夹路径是的res / xml的。

            

添加完成之后,在res/xml/下打开添加的preference.xml文件。可以看到Android也为我们提供两种编辑模式,可视化的结构设计及xml源码设计。推荐使用structure进行创建。如图所示:

      

下面我们看看PrefeneceActivity都提供了哪几种元素可供使用。点击Add按钮,在打开的新窗口中可以看到以下几项:

             

CheckBoxPreference:复选框选择项,对应的值的TURE或FLASE如图:

           

EditTextPreference:输入编辑框,值为字符串类型,会弹出对话框供输入。

 

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

 

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

          

PreferenceCategory:用于分组效果如下:

         

PreferenceScreen:PreferenceActivity的根元素,必须为它。

 

RingtonePreference:系统玲声选择。

        

OK,Preferenc的基本元素介绍完毕,下一节将使用它们创建一个完整的Preference并进行显示。

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

分析乐手Setting,第一部分为“我的位置”,包括“使用无线网线”和“使用GPS”两个部分,而且都是CheckBox,根据上节学习,应该包括一个PreferenceCategory和两个CheckBoxPreference。

XML代码:

<PreferenceCategory的android:标题=“ 我的位置 “机器人:键=” set_local “> 
<CheckBoxPreference 机器人:标题=“ 使用无线网络 “机器人:设置defaultValue =”真“> </ CheckBoxPreference> <CheckBoxPreference 机器人:标题=“ 使用全球定位系统“> </ CheckBoxPreference> </ PreferenceCategory> 





以上代码当然也可以用的Andr​​oid提供的IDE工具直接生成视频结构如下:

     
PreferenceCategory属性分析:

         标题:显示的标题

         (以下相同)。

CheckBoxPreference属性分析:

        键:唯一标识。

        标题:显示标题(大字体显示)

       摘要:副标题(小字体显示)

       设置defaultValue:默认值(当然,此处只能是真或假的了)

 

Preference.xml的第二部分为“无线和网络设置”,此部分包括的内容比较多,也稍微复杂,一步一步来分析。

XML代码:

<  PreferenceCategory  android  :  title  =  "无线和网络设置"  > 
<  CheckBoxPreference  android  :  key  =  "apply_fly" 
android  :  summary  =  "禁用所有无线连接"  android  :  title  =  "飞行模式"  > 
</  CheckBoxPreference  > 
<  CheckBoxPreference  android  :  key  =  "apply_internet" 
android  :  summary  =  "禁用通过USB共享Internet连接"  android  :  title  =  "Internet共享"  > 
</  CheckBoxPreference  > 
<  CheckBoxPreference  android  :  key  =  "apply_wifi" 
android  :  summary  =  "打开Wi-Fi"  android  :  title  =  "Wi-Fi"  > 
</  CheckBoxPreference  > 
<  Preference  android  :  summary  =  "设置和管理无线接入点"  android  :  title  =  "Wi-Fi设置" 
android  :  dependency  =  "apply_wifi"  android  :  key  =  "wifi_setting"  > 
</  Preference  > 
<  CheckBoxPreference  android  :  key  =  "apply_bluetooth" 
android  :  summary  =  "启用蓝牙"  android  :  title  =  "蓝牙"  > 
</  CheckBoxPreference  > 
<  Preference  android  :  summary  =  "管理连接、设备设备名称和可检测性" 
android  :  title  =  "蓝牙设置"  android  :  dependency  =  "apply_bluetooth" 
android  :  key  =  "bluetooth_setting"  > 
</  Preference  > 
<  EditTextPreference  android  :  key  =  "number_edit" 
android  :  title  =  "输入电话号码"  > 
</  EditTextPreference  > 
<  ListPreference  android  :  title  =  "部门设置"  android  :  entries  =  "@array/department" 
android  :  entryValues  =  "@array/department_value"  android  :  dialogTitle  =  "选择部门" 
android  :  key  =  "depart_value"  > 
</  ListPreference  > 
<  RingtonePreference  android  :  ringtoneType  =  "all"  android  :  title  =  "玲聲"  android  :  showDefault  =  "true"  android  :  key  =  "ring_key"  android  :  showSilent  = "true"  > 
</  RingtonePreference  > 
</  PreferenceCategory  >

 

对应的结构图:

        

第二部分中前三个都为CheckBoxPreference,不心多说,从< Preference android : key = "bluetooth_setting"/>开始。

偏好属性分析:

       键:唯一标识。

        标题:显示标题(大字体显示)

       摘要:副标题(小字体显示)

     CheckPreference值为真时,优先股则为可用,否则为不可用。

 

EditTextPreperence属性分析:

    键:唯一标识。

     标题:显示标题(大字体显示)

ListPreference属性分析:

   键:唯一标识。

   标题:显示标题(大字体显示)

  dialogTitle:弹出对话框的标题

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

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  >

RingtonePreference:玲声(暂时没有用到过),暂时略过。

OK,Preference.xml内容已经分析完毕,属性都大致相同,相信亲自动力一试也就那么回事。那么如何把Preference.xml中内容展现出来呢?

Layout是通过继续自Activity的类来进行显示的,前面提到过,PreferenceActivity是专门用于显示preference的,所以只要创建一个继承自PreferenceActivity类即可。代码如下: 

公共类设置扩展PreferenceActivity { 
@覆盖
公共无效的onCreate(捆绑savedInstanceState){ 
super.onCreate(savedInstanceState); 
/ /所的的值将会自动保存到SharePreferences 
addPreferencesFromResource(R.xml.preference); 

}

 

接下来就是运行程序,显示劳动成果。至此,工作已经完成大半,所有的值都会保存到SharedPreferences中,我们也可以读取到保存的结果。

还有一个重要的问题,就是如何响应PreferenceActivity的操作。其实只要重写PreferenceActivity的onPreferenceTreeClick的方法就可以了,通过参数preference来判断是对那一个元素进行的,并根据需要进行操作。

@覆盖  公共  布尔  onPreferenceTreeClick(PreferenceScreen preferenceScreen,
优先级preference){ 返回假 ; } 

 

获取配置信息为了方便的获取配置信息,我们可以在PreferenceActivity里添加一些pulbic方法来公开配置信息的访问。/ ** *获取是否播放声音* / 公共静态布尔playSounds(上下文上下文){ 返回PreferenceManager.getDefaultSharedPreferences( 。上下文)getBoolean(天籁,SOUNDS_DEFAULT); } / ** *设置播放的声音 * @参数上下文上下文 * @参数值是否播放* / 公共静态无效setPlaySounds(上下文语境,布尔值){ PreferenceManager.getDefaultSharedPreferences(上下文) 。编辑()putBoolean(天籁,价值)提交(); } / ** *获取警告时间 * @参数上下文上下文 * @返回警告时间秒* / 公共静态诠释getWarningTime(上下文上下文){ 字符串 E) { setWarningTime(上下文,WARNING_TIME_DEFAULT);返回WARNING_TIME_DEFAULT; } } / ** *设置警告时间 * @参数上下文上下文 * @参数warningTime警告时间* / 公共静态无效setWarningTime(上下文语境,诠释warningTime){PreferenceManager.getDefaultSharedPreferences 。(上下文)编辑()putString(WARNING_TIME,Integer.toString(warningTime))提交(); } / ** *参加人数无限制 * @参数上下文 * @返回* / 公共静态布尔allowUnlimitedParticipants(上下文语境) { 返回。PreferenceManager.getDefaultSharedPreferences(上下文)getBoolean(UNLIMITED_PARTICIPANTS,UNLIMITED_PARTICIPANTS_DEFAULT); } 公共静态无效setAllowUnlimitedParticipants(上下文语境,布尔值){ 。PreferenceManager.getDefaultSharedPreferences(上下文)编辑()putBoolean(UNLIMITED_PARTICIPANTS,值)提交() ; } / ** * 上下文){ 返回PreferenceManager.getDefaultSharedPreferences(上下文)getBoolean(VARIABLE_MEETING_LENGTH,VARIABLE_MEETING_LENGTH_DEFAULT); } 公共静态无效setAllowVariableMeetingLength(上下文语境,布尔值){ 。PreferenceManager.getDefaultSharedPreferences(上下文)编辑()putBoolean(VARIABLE_MEETING_LENGTH,价值)提交(); } getDefaultSharedPreferences(上下文 commit()方法。

当其他地方需要使用配置时,可以直接调用setting.getXXX()方法来获取配置信息。



Preferencescreen中启动活动例如wireless_setting.xml中有如下片段<PreferenceScreen     布尔onPreferenceTreeClick(PreferenceScreen preferenceScreen,优先级preference){        如果((偏好== mAirplaneModePreference)&&                 (Boolean.parseBoolean(                    SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE)))){             / /在ECM模式下启动ECM应用程序对话框           startActivityForResult(                新意图( TelephonyIntents.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS,空),                REQUEST_CODE_EXIT_ECM);             返回true;         }         其他{             / /让意图的偏好管理器来启动            的回报 performClick(PreferenceScreen preferenceScreen){         如果{(ISENABLED()!)            回报;         }         的onClick();         如果(mOnClickListener = NULL && mOnClickListener.onPreferenceClick(这)){            回报;         }         PreferenceManager preferenceManager = getPreferenceManager();         如果(preferenceManager! = NULL){             PreferenceManager.OnPreferenceTreeClickListener监听器= preferenceManager                     getOnPreferenceTreeClickListener。();             如果(preferenceScreen = NULL &&监听器= NULL!                    && listener.onPreferenceTreeClick(preferenceScreen,这)){                 回报;             }        }         !如果(mIntent = NULL){             上下文上下文= 屏幕共享出来







   <activity android:name=".UserPreferences" android:label="Earthquake Preferences">

      <intent-filter>
         <action android:name="com.paad.myapp.ACTION_USER_PREFERENCE" />
      </意图过滤器>
   </活动>


一是xml里面是否设置正确,第二是调用该xml的java类是否在onPreferenceTreeClick这个函数需要返回false

转载于:https://www.cnblogs.com/zwb7926/p/3584571.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值