Android PreferenceActivity使用

PreferenceActivity继承了ListActivity,定义Activity继承PreferenceActivity。在res目录下新建一个xml文件夹,接着在这个文件夹下新建一个取名为preferences.xml的File文件,xml中可以使用的标签(Tag)可以分为两类,一类是管理布局的显示,如PreferenceScreen;另一类是内容设置标签,如CheckBoxPreference。把java文件中的setContentView(R.layout.main)改为addPreferencesFromResource(R.xml.preferences);包含在PreferenceScreen标签里的内容都将以一个完整的页面显示,PreferenceScreen可以嵌套。

<?xml version="1.0" encoding="UTF-8"?>
<PreferenceScreen 
	xmlns:android="http://schemas.android.com/apk/res/android" 
	android:title="Settings">
	<PreferenceScreen 
		xmlns:android="http://schemas.android.com/apk/res/android"
		android:title="Emotions"
		android:summary="settings about emotions">
		<CheckBoxPreference  
			android:title="Love me?" 
			android:summaryOn="Yes,I love you!"
			android:summaryOff="No,I am sorry."
			android:defaultValue="true"
			android:key="CheckBoxPreference">
		</CheckBoxPreference>
		<CheckBoxPreference 
			android:title="Hate me?" 
			android:summaryOn="Yes,I hate you!"
			android:summaryOff="No,you are a good person."
			android:defaultValue="false">
		</CheckBoxPreference>
		<SwitchPreference 
		    android:summaryOn="summaryOn"
		    android:summaryOff="summaryOff"
		    android:title="SwitchPreference"
		    android:key="SwitchPreference"/>	
	</PreferenceScreen>
	<PreferenceScreen 
		xmlns:android="http://schemas.android.com/apk/res/android"
		android:title="Relations"
		android:summary="settings about relations">
		<CheckBoxPreference 
			android:title="Family?" 
			android:summaryOn="Yes,we are family!"
			android:summaryOff="No,I am sorry."
			android:defaultValue="true">
		</CheckBoxPreference>
		<CheckBoxPreference 
			android:title="Friends?" 
			android:summaryOn="Yes,we are friends!"
			android:summaryOff="No,I am sorry."
			android:defaultValue="false">
		</CheckBoxPreference>		
	</PreferenceScreen>	
</PreferenceScreen>

由于布局中有三个PreferenceScreen,因此将显示三个页面。和管理布局显示相关的除了PreferenceScreen外,还有一个常用的为PreferenceCategory,如果将以上布局中间那两个PreferenceScreen改为PreferenceCategory,则只显示一个页面,PreferenceCategory只是把包含的内容归为同一类,但只是显示在一个页面中。


当PreferenceActivity中的内容改变时,Android系统会自动进行保存和持久化维护,我们只需要在要用的设置界面中数据的地方进行读取就可以了。同时Android还提供了OnPreferenceClickListener和OnPreferenceChangeListener两个与Preference相关的监听接口,当PreferenceActivity中的某一个Preference进行了点击或者改变的操作时,都会回调接口中的函数,这样可以第一个时间向其他Activity等通知系统设置进行了改变。

public class MainActivity extends PreferenceActivity implements OnPreferenceChangeListener,   
	OnPreferenceClickListener{
	private CheckBoxPreference cBoxPreference = null;
	private SwitchPreference switchPreference = null;
	private final static String TAG = "MainActivity";
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//setContentView(R.layout.activity_main);
		//从xml文件中添加Preference项  
		addPreferencesFromResource(R.xml.preferences);
		//findPreference函数通过key可以找到对应的设置项
		cBoxPreference = (CheckBoxPreference)findPreference("CheckBoxPreference");
		switchPreference = (SwitchPreference)findPreference("SwitchPreference");
		cBoxPreference.setOnPreferenceChangeListener(this);  
		switchPreference.setOnPreferenceClickListener(this);
		cBoxPreference.setOnPreferenceChangeListener(this);  
		switchPreference.setOnPreferenceClickListener(this);
	}

	/* 
	 * (non-Javadoc)
	 * @param preference
	 * @param newValue
	 * @return 
	 * @see android.preference.Preference.OnPreferenceChangeListener#onPreferenceChange(android.preference.Preference, java.lang.Object) 
	 */
	@Override
	public boolean onPreferenceChange(Preference preference, Object newValue) {
		// TODO Auto-generated method stub
		//判断是哪个Preference改变了  
        if(preference.getKey().equals("CheckBoxPreference")){  
            Toast.makeText(this, "CheckBoxPreference onPreferenceChange", Toast.LENGTH_SHORT).show();
            //读取设置信息
    		SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);  
            Boolean cb = settings.getBoolean("CheckBoxPreference", false);  
            Boolean sw = settings.getBoolean("SwitchPreference", false);  
            Toast.makeText(this, "CheckBoxPreference " + (cb ? "true":"false") + " SwitchPreference "+ (sw ? "true":"false"), Toast.LENGTH_SHORT).show();
        }else if(preference.getKey().equals("SwitchPreference")){ 
        	Toast.makeText(this, "SwitchPreference onPreferenceChange", Toast.LENGTH_SHORT).show();
        	//读取设置信息
    		SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);  
            Boolean cb = settings.getBoolean("CheckBoxPreference", false);  
            Boolean sw = settings.getBoolean("SwitchPreference", false);  
            Toast.makeText(this, "CheckBoxPreference " + (cb ? "true":"false") + " SwitchPreference "+ (sw ? "true":"false"), Toast.LENGTH_SHORT).show();
        }else{  
            //如果返回false表示不允许被改变  
            return false;  
        }  
        //返回true表示允许改变  
        return true;  
	}

	/* 
	 * (non-Javadoc)
	 * @param preference
	 * @return 
	 * @see android.preference.Preference.OnPreferenceClickListener#onPreferenceClick(android.preference.Preference) 
	 */
	@Override
	public boolean onPreferenceClick(Preference preference) {
		// TODO Auto-generated method stub
		//判断是哪个Preference改变了  
        if(preference.getKey().equals("CheckBoxPreference")){  
            Toast.makeText(this, "CheckBoxPreference onPreferenceChange", Toast.LENGTH_SHORT).show();
            //读取设置信息
    		SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);  
            Boolean cb = settings.getBoolean("CheckBoxPreference", false);  
            Boolean sw = settings.getBoolean("SwitchPreference", false);  
            Toast.makeText(this, "CheckBoxPreference " + (cb ? "true":"false") + " SwitchPreference "+ (sw ? "true":"false"), Toast.LENGTH_SHORT).show();
        }else if(preference.getKey().equals("SwitchPreference")){ 
        	Toast.makeText(this, "SwitchPreference onPreferenceChange", Toast.LENGTH_SHORT).show();
        	//读取设置信息
    		SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);  
            Boolean cb = settings.getBoolean("CheckBoxPreference", false);  
            Boolean sw = settings.getBoolean("SwitchPreference", false);  
            Toast.makeText(this, "CheckBoxPreference " + (cb ? "true":"false") + " SwitchPreference "+ (sw ? "true":"false"), Toast.LENGTH_SHORT).show();
        }else{  
            //如果返回false表示不允许被改变  
            return false;  
        }  
        //返回true表示允许改变  
        return true;  
	}
}
一个Preference拥有的属性:
1. Key为这个Preference的ID,设置了才可以在代码中引用
2. Title是显示的标题
3. Summary是显示在标题下的文字介绍
4. Dependency中填写一个CheckBoxPreference的Key,这样就会在填写的那个CheckBoxPreference勾选时当前这个Preference才可用Default Value为初始值

内容设置标签包括:
1.对话框显示的DialogPreference
2.输入文本的EditTextPreference
3.列表方式显示供选择的ListPreference
4.设置铃声的RingtonePreference
5.开关切换SwitchPreference
6.多选列表显示MultiSelectListPreference

在应用程序安装目录下,存在一个以应用程序包名为前缀的xml文件保存了所有设置项值:



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值