PreferenceActivity的使用 程序动态添加修改Preference

PreferenceActivity的XML中主要有7种元素,分别是PreferenceScreen(根元素),CheckBoxPreference(CheckBox选项,如系统设置-无线网络里的飞行模式),EditTextPreference(弹出一个EditText),ListPreference(弹出一个选择列表),Preference(只显示文本,需要在代码中添加点击事件),PreferenceCategory(分组标题栏),RingtonePreference(铃声设置)。
下面写个小例子:
添加类型为Preference的xml文件,内容如下:


<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
	<PreferenceCategory android:title="播放设置">
		<ListPreference android:title="播放服务器" android:summary="设置默认播放服务器,默认为1号服务器" android:entries="@array/server" android:entryValues="@array/server"
			android:dialogTitle="选择播放服务器" android:key="server_list">
		</ListPreference>
		<ListPreference android:title="播放模式" android:summary="模式1不支持MoboPlayer" android:entries="@array/play_mode" android:entryValues="@array/mode_value"
			android:dialogTitle="选择播放服务器" android:key="play_mode">
		</ListPreference>
		<ListPreference android:title="播放器" android:summary="设置默认播放器" android:dialogTitle="选择已安装播放器" android:key="player">
		</ListPreference>

	</PreferenceCategory>
	<PreferenceCategory android:title="帮助">
		<Preference android:title="查看帮助" android:summary="如果您有问题,请先查看帮助" android:key="help" />
	</PreferenceCategory>
	<PreferenceCategory android:title="反馈">
		<Preference android:title="用户反馈" android:summary="您对我们有什么意见,可以联系我们" android:key="feedback" />
	</PreferenceCategory>
</PreferenceScreen>

android:title即大号字体显示的标题,android:summary即短描述,android:key即保存该值的key,对ListPreference而言,还有android:entries,android:entryValues分别是显示的列表数据,和保存的值。
其中第三个ListPreference并没有设置android:entries,android:entryValues,我们将在Java代码中设置。


public class Setting extends PreferenceActivity {
	Dialog dialog;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		addPreferencesFromResource(R.xml.setting);
		dialog=new Dialog(this);
		//自己写的用于执行相应操作的类
		ListPreference pre=(ListPreference)findPreference("player");
		pre.setEntries(new CharSequence[]{"Moboplayer","Vplayer","RockPlayer"});
		pre.setEntryValues(new CharSequence[]{"0","1","2"});
		//动态设置ListPreference
		
	}



	@Override
	public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
		// TODO Auto-generated method stub
		String key=preference.getKey();
		//根据被点击项的key执行相应操作
		if(key.equals("help"))
		{
			dialog.showHelp();
		}
		if(key.equals("feedback"))
		{
			dialog.feedBack();
		}
		return super.onPreferenceTreeClick(preferenceScreen, preference);
	}

}

© 2011, 冰冻鱼. 请尊重作者劳动成果,复制转载保留本站链接! 应用开发笔记