ALFA Dev工作室原创文章如转载,请注明:转载自博客原文地址:http://blog.csdn.net/kongre/article/details/6734123
Android Framework提供了多种方式对数据进行操作,程序员可以使用文件,数据库等方式对数据进行操作。其中最简单的一种方式是使用Android Preferences Framework. Android Preferences Framework提供了友好的界面对用户的个性选择进行数据操作。使用Android手机的用户应该对一些关于手机的设置操作应该都比较熟悉,其实此应用程序是使用Android Preferences Framework的典型代表。Android Preferences Framework用到的最核心的对象是SharedPreferences对象。 在后面的代码当中我们会介绍如何使用此核心对象。
一、使用Android Preferences Framework构建类似Settings App的步骤
1.首先需要建立描述Preferences的XML文件,主要此类型文件要放在res/xml子目录下面
建立如下结构的XML文件:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
android:key="checkbox"
android:title="Checkbox Preference"
android:summary="Check it on, check it off" />
<RingtonePreference
android:key="ringtone"
android:title="Ringtone Preference"
android:summary="Pick a tone, any tone" />
</PreferenceScreen>
注:CheckboxPreference代表复选框类型Preference,RingtonePreference代表铃声类型Preference。2.我们需要让使用此Preference的Activity继承自PreferenceActivity
public class PreferenceDemoActivity extends PreferenceActivity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.simple);
}
}
3.运行程序看结果:大家可能注意到在XML文件当中,XML文件的根元素是PreferenceScreen。CheckboxPreference节点和RingtonePreference字节都是PreferenceScreen的子节点。PreferenceScreen跟Activity的作用有点类似,相当于一块屏幕,如果想让用户不在同一个屏幕当中作出选择,那么可以嵌套PreferenceScreen节点。这一点我们在后面将会讲述。大家还会注意到CheckboxPreference和RingtonePreference节点都有一个属性android:key,这个属性非常关键,用来进行Preferences存储的时候的key值。我们的这个应用的包名为:com.freedie.preferencedemo,所以生成的保存Preference的文件名称为:com.freedie.preferencedemo_preferences.xml。大家可以尝试看下,然后打开对应的XML文件,可以清楚的看到键值对的对应情况。在这里提醒大家一下,我们完成了对用户定制数据的保存,但是我们没有编写任何显示对数据进行存储的JAVA代码。除了那一句加载Preference XML文件之外。数据操作的事情全部由Android为我们做好了。到此,您也许感受到了Android Preferences Framework的强大。接下来,让我们再进一步的走进它。
二、怎么获取保存的用户定制数据,我们再建立一个Activity(MainActivity)用于显示用户选择的CheckboxPreference和RingtonePreference
public class MainActivity extends Activity {
TextView checkboxTv, ringtoneTv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
checkboxTv = (TextView)findViewById(R.id.checkboxTextView);
ringtoneTv = (TextView)findViewById(R.id.ringtoneTextView);
}
@Override
protected void onResume() {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
checkboxTv.setText(String.valueOf(sharedPreferences.getBoolean("checkbox", false)));
String ringtone =sharedPreferences.getString("ringtone", "unset");
ringtoneTv.setText("".equals(ringtone) ? "静音" : ringtone);
super.onResume();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.simple_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.chooseMenu:
Intent intent = new Intent(this, PreferenceDemoActivity.class);
startActivity(intent);
return true;
}
return super.onOptionsItemSelected(item);
}
}
三、如何做出类似Android 设置应用程序当中的对Preference进行分组的效果
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="Simple Preferences">
<CheckBoxPreference android:key="checkbox"
android:title="Checkbox Preference" android:summary="Check it on, check it off" />
<RingtonePreference android:key="ringtone"
android:title="Ringtone Preference" android:showDefault="true"
android:showSilent="true" android:summary="Pick a tone, any tone" />
</PreferenceCategory>
<PreferenceCategory android:title="Detail Screens">
<PreferenceScreen android:key="detail" android:title="Detail Screen"
android:summary="Additional preferences held in another page">
<CheckBoxPreference android:key="checkbox2"
android:title="Another Checkbox" android:summary="On. Off. It really doesn't matter." />
</PreferenceScreen>
</PreferenceCategory>
</PreferenceScreen>
其中每一组可以用PreferenceCategory节点来表示,效果如下:
大家一定注意到了在PreferenceCategory节点下面含有PreferenceScreen子节点。那就意味着当我们单击Detail Screen的时候,这项Preference会显示在另外一个屏幕。废话不多说,直接上图。
四、EditPreference和ListPreference如何构建
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="Simple Preferences">
<CheckBoxPreference android:key="checkbox"
android:title="Checkbox Preference" android:summary="Check it on, check it off" />
<RingtonePreference android:key="ringtone"
android:title="Ringtone Preference" android:showDefault="true"
android:showSilent="true" android:summary="Pick a tone, any tone" />
</PreferenceCategory>
<PreferenceCategory android:title="Detail Screens">
<PreferenceScreen android:key="detail" android:title="Detail Screen"
android:summary="Additional preferences held in another page">
<CheckBoxPreference android:key="checkbox2"
android:title="Another Checkbox" android:summary="On. Off. It really doesn't matter." />
</PreferenceScreen>
</PreferenceCategory>
<PreferenceCategory android:title="Simple Preferences">
<EditTextPreference android:key="text"
android:title="Text Entry Dialog" android:summary="Click to pop up a field for entry"
android:dialogTitle="Enter something useful" />
<ListPreference android:key="list" android:title="Selection Dialog"
android:summary="Click to pop up a list to choose from"
android:entries="@array/cities" android:entryValues="@array/airport_codes"
android:dialogTitle="Choose a Pennsylvania city" />
</PreferenceCategory>
</PreferenceScreen>
注:对于ListPreference因为单击的时候会出现一个列表,所以需要我们在我们的strings.xml加上
<string-array name="cities">
<item>Philadelphia</item>
<item>Pittsburgh</item>
<item>Allentown/Bethlehem</item>
<item>Erie</item>
<item>Reading</item>
<item>Scranton</item>
<item>Lancaster</item>
<item>Altoona</item>
<item>Harrisburg</item>
</string-array>
<string-array name="airport_codes">
<item>PHL</item>
<item>PIT</item>
<item>ABE</item>
<item>ERI</item>
<item>RDG</item>
<item>AVP</item>
<item>LNS</item>
<item>AOO</item>
<item>MDT</item>
</string-array>
分别代表列表每一项显示的值,和每一项代表的值。
至此,跟大家大体的介绍了下Android Preferences Framework。特别是一些用得比较多的CheckboxPreference, RingtonePreference, EditTextPreference以及 ListPreference的XML构建,以及如何获取Preference的值。相信大家都已经对此掌握的非常不错了。
最后如果你还是觉得我写的不够详细 看的不够爽 不要紧我把源代码的下载地址贴出来 欢迎大家一起讨论学习ALFA Dev工作室希望可以和大家一起进步。
下载地址:http://download.csdn.net/source/3562116