Android Preference Framework

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值