HardBirch

Android中preference的使用(一)

时间:12-08-23 栏目:安卓技术篇 作者:魔豆先生 评论:0 点击: 1,469 次

在Android系统中,当我们点击Menu按钮时,则会弹出Menu的菜单选项,其中一项是设置选项,点击了设置选项后,则会弹出系统的设置Activity界面,这些设置功能是如何实现的呢?Android系统本身就大量用到了PreferenceActivity来对系统进行信息配置和管理,那么它是怎么保存数据的呢,如何创建PrefenceActivity的呢,更关键是怎样触发相应事件的呢。

Android系统有四种基本的数据保存方法,一是SharedPreference,二是文件,三是SQLite,四是ContentProvider。PreferenceActivity是如何保存的数据,其实就是通过SharedPreference键值对的形式来保存数据的。

下面我们以一个例子来说明如何在Android系统中制作一个设置的功能。先看下该例子的大概框架图:

在src中有两个Activity,其中PreferenceDemo.java是显示Menu页面,MyPreference.java是设置页面;在res/xml目录下有个mypreference.xml的文件,该文件是设置页面的布局文件,在添加该xml文件的时候,注意是选择的不是Layout,而是Preference,而且注意Folder路径是 res/xml。

 

下面是各个文件的源代码:

1. mypreference.xml 的源码如下:

 

[c-sharp] view plaincopy

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <PreferenceScreen
  3.   xmlns:android="http://schemas.android.com/apk/res/android">
  4. <PreferenceCategory android:title="我的位置" android:key="set_local">
  5.   <CheckBoxPreference
  6.      android:key="apply_wifi"
  7.      android:title="使用无线网络"
  8.      android:summary="使用无线网络在应用程序(例如Google地图)中查看位置"
  9.      android:defaultValue="true" >
  10.   </CheckBoxPreference>
  11.   <CheckBoxPreference
  12.      android:key="apply_gps"
  13.      android:title="使用GPS"
  14.      android:summary="定位到街道级别(需要消耗更多的电量以及天气允许)">
  15.   </CheckBoxPreference>
  16. </PreferenceCategory>
  17. <PreferenceCategory android:title="无线和网络设置">
  18.   <CheckBoxPreference
  19.      android:key="apply_fly"
  20.      android:title="飞行模式"
  21.      android:summary="禁用所有无线连接">
  22.   </CheckBoxPreference>
  23.   <CheckBoxPreference
  24.      android:key="apply_internet"
  25.      android:title="Internet共享"
  26.      android:summary="禁用通过USB共享Internet连接">
  27.   </CheckBoxPreference>
  28.   <CheckBoxPreference
  29.      android:key="apply_wifi"
  30.      android:title="Wi-Fi"
  31.      android:summary="打开Wi-Fi">
  32.   </CheckBoxPreference>
  33.   <Preference
  34.      android:key="wifi_setting"
  35.      android:title="Wi-Fi设置"
  36.      android:summary="设置和管理无线接入点"
  37.      android:dependency="apply_wifi">
  38.   </Preference>
  39.   <CheckBoxPreference
  40.      android:key="apply_bluetooth"
  41.      android:title="蓝牙"
  42.      android:summary="启用蓝牙">
  43.   </CheckBoxPreference>
  44.   <Preference
  45.      android:key="bluetooth_setting"
  46.      android:title="蓝牙设置"
  47.      android:summary="管理连接、设备设备名称和可检测性"
  48.      android:dependency="apply_bluetooth">
  49.   </Preference>
  50.   <EditTextPreference
  51.      android:key="number_edit"
  52.      android:title="输入电话号码">
  53.   </EditTextPreference>
  54.   <ListPreference
  55.      android:key="depart_value"
  56.      android:title="部门设置"
  57.      android:dialogTitle="选择部门"
  58.      android:entries="@array/department"
  59.      android:entryValues="@array/department_value">
  60.   </ListPreference>
  61.   <RingtonePreference
  62.      android:key="ring_key"
  63.      android:title="铃声"
  64.      android:ringtoneType="all"
  65.      android:showDefault="true"
  66.      android:showSilent="true">
  67.   </RingtonePreference>
  68. </PreferenceCategory>
  69. </PreferenceScreen>

 

2. MyPreference.java的源码如下:【注:该类继承了PreferenceActivity.java

 

[c-sharp] view plaincopy

  1. package com.andyidea.preference;
  2. import android.os.Bundle;
  3. import android.preference.PreferenceActivity;
  4. public class MyPreference extends PreferenceActivity {
  5.     @Override
  6.     public void onCreate(Bundle savedInstanceState) {
  7.         super.onCreate(savedInstanceState);
  8.         addPreferencesFromResource(R.xml.mypreference);
  9.     }
  10. }

 

 

3. PreferenceDemo.java的源码如下:

 

[c-sharp] view plaincopy

  1. package com.andyidea.preference;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.Menu;
  6. import android.view.MenuItem;
  7. public class PreferenceDemo extends Activity {
  8.     public static final int SET = Menu.FIRST;
  9.     public static final int EXIT = Menu.FIRST+1;
  10.     @Override
  11.     public void onCreate(Bundle savedInstanceState) {
  12.         super.onCreate(savedInstanceState);
  13.         setContentView(R.layout.main);
  14.     }
  15.     //创建Menu菜单
  16.     @Override
  17.     public boolean onCreateOptionsMenu(Menu menu) {
  18.         menu.add(0,SET,0,"设置");
  19.         menu.add(0,EXIT,0,"退出");
  20.         return super.onCreateOptionsMenu(menu);
  21.     }
  22.     //点击Menu菜单选项响应事件
  23.     @Override
  24.     public boolean onOptionsItemSelected(MenuItem item) {
  25.         switch(item.getItemId()){
  26.         case 1:
  27.             Intent mIntent = new Intent();
  28.             mIntent.setClass(this, MyPreference.class);
  29.             startActivity(mIntent);
  30.             break;
  31.         case 2:
  32.             finish();
  33.             break;
  34.         }
  35.         return super.onOptionsItemSelected(item);
  36.     }
  37. }

 

4. array.xml 源码:

 

[c-sharp] view plaincopy

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <string-array name="department">
  4.   <item>综合部</item>
  5.   <item>外贸部</item>
  6.   <item>行政部</item>
  7. </string-array>
  8. <string-array name="department_value">
  9.   <item>001</item>
  10.   <item>002</item>
  11.   <item>003</item>
  12. </string-array>
  13. </resources>

 

 

同时我们也别忘了在 AndroidManifest.xml中对MyPreference.java进行注册。即在 AndroidManifest.xml中的application节点添加:<activity android:name=".MyPreference"/> 。

下面我们来看下运行的结果:

1. 设置Menu的主界面

 

2. 设置功能界面

声明: 本文由( 魔豆先生 )原创编译,转载请保留链接: Android中preference的使用(一)

Android中preference的使用(一):等您坐沙发呢!

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐