PreferenceActivity(首选项设置页)

一、PreferenceActivity简介

  一直都以为软件的设置界面都是作者自己写的,今天才发现有个现成的PreferenceActivity可以使用,非常方便。大家都应该知道绝大多数应用都有选项页面,这里指的选项页面绝大多数使用过PreferenceActivity继承下来的(当然,如果你牛逼你也可以自己写)。如果你还不知道什么是Preference,请移步(http://blog.csdn.net/plussoft/article/details/9152573)。与其它偏好设置相同的,PreferenceActivity生成的信息也是用XML储存的。另外值得注意的是,通过PreferenceActivity生成的XML文件,命名方式是定死了的,生成的XML文件在data/data/<工程名>/shared_prefs/下,名字为“<工程名>_Preference.xml”,这是无法改变的。正式因为如此,PreferenceActivity生成的XML也被称为全局设置、应用设置,有着至高无上的地位。在PreferenceActivity中,所有的修改都会自动更新该XML文件,不需要我们手动去设置大量的监听。另外,我们还有必要复习一下各种获取SharedPreferences的方式:

一、getPreferences():可以获取当前Activity中的preference,这个方法我没用过(主要是没搞懂);

二、PreferenceManager.getDefaultSharedPreferences():顾名思义,获取全局变量的Preferences,也就是PreferenceActivity生成的Preference;

三、getSharedPreferences():可以获取该应用中全部的preferences,也就是在(http://blog.csdn.net/plussoft/article/details/9152573)所提到的。前面两种方法都是基于该方法的。

  回到PreferenceActivity。为了简化与preference相关的应用开发,android为我们提供了一系列的api来帮助我们。在PreferenceActivity中,给我们提供了四个选项集成控件:ListPreference,EditTextPreference,CheckBoxPreference和RingtonePreference。如果还不能够满足你,那你唯有自行开发了。另外,RingtonePreference在此不做介绍,个人感觉真没什么用——有什么应用会要用到你的铃声呢?下面开始展示PreferenceActivity的独有魅力。


二、ListPreference

先来看看最终效果图:

PreferenceActivity(首选项设置页)_第1张图片PreferenceActivity(首选项设置页)_第2张图片

功能不多阐述。来看看MainActivity代码:

package com.plusjun.preference;

import android.os.Bundle;
import android.preference.PreferenceActivity;

/*
 * 要记得是继承PreferenceActivity而不是Activity
 */
public class MainActivity extends PreferenceActivity  {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		/* 放入设置版面文件
		 * 在这里,R.xml.mylistperference可以看作是布局文件
		 */
		/*
		 * addPreferencesFromResource方法在Android3.0中就被弃用了
		 * 但却没有替代方法
		 * 谷歌的想法是,希望我们继承PreferenceFragment来实现默认选项页
		 * 但是这太难了。真的
		 */
		addPreferencesFromResource(R.xml.mylistperference);
	}
}

res/xml/mylistperference.xml布局文件




  
  


我们的数据来源是在strings.xml文件中,这是一种良好的变成习惯。当然了,不一定要strings.xml文件,你可以自定义文件,但是不能有相同的标签。

在strings.xml中添加一下代码段:

    
        shandong
        fujian
        beijing
        hebei
    
    
    
        山东
        福建
        北京
        河北
    

    beijing

在data/data/<工程名>/shared_prefs/下,名字为“<工程名>_Preference.xml“文件中,内容如下:



fujian1

由此可见,android:key="myListPreference"正是XML中的键名,值为我们选择的值。


三、CheckBoxPreference

效果如下:

PreferenceActivity(首选项设置页)_第3张图片

我们继续拿上一个项目来修改。MainActivity仍保持不变:

package com.plusjun.preference;

import android.os.Bundle;
import android.preference.PreferenceActivity;

public class MainActivity extends PreferenceActivity  {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		addPreferencesFromResource(R.xml.mylistperference);
	}
}

res/xml/checkbox.xml布局文件




    
    
    
    

最终在“<工程名>_Preference.xml“生成的文件内容:





显然,CheckBoxPreference要比ListPreference简单多了。


四、EditTextPreference

效果图如下:

PreferenceActivity(首选项设置页)_第4张图片PreferenceActivity(首选项设置页)_第5张图片

当我们点击主页面的输入名称时,就会弹出该对话框,让我们输入文字。

MainActivity仍保持不变:

package com.plusjun.preference;

import android.os.Bundle;
import android.preference.PreferenceActivity;

public class MainActivity extends PreferenceActivity  {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		addPreferencesFromResource(R.xml.mylistperference);
	}
}

res/xml/checkbox.xml




    
    


五、Preferences分组

目的很明显的,就是为了更美观。把不同类型的选项进行归类,提高用户体验。

首先第一种,就是制造二(多)级页面。只有点进去才会看到详细选项,如图:

PreferenceActivity(首选项设置页)_第6张图片PreferenceActivity(首选项设置页)_第7张图片

MainActivity仍保持不变,res/xml/checkbox.xml:




    
    
        
        
    

    
    
        
        
    

    
    
        
        
    


可以看出,PreferenceScreen本质上就是一个层次标签。

如果我们首选项的数目较少,但是我们依旧想为他们分组下,怎么办呢?

我们可以将上面代码中的嵌套PreferenceScreen改为PreferenceCategory,就这么简单!代码就不上了,效果如下:

PreferenceActivity(首选项设置页)_第8张图片


以上部分内容转载或参考来源如下:

http://www.eoeandroid.com/thread-5305-1-1.html

http://www.pocketdigi.com/20110405/231.html

http://blog.csdn.net/flowingflying/article/details/6671548

http://blog.csdn.net/chenzheng_java/article/details/6285966

http://blog.csdn.net/chenzheng_java/article/details/6286037

http://blog.csdn.net/chenzheng_java/article/details/6286115

http://blog.csdn.net/chenzheng_java/article/details/6286195

在此表示感谢。
转载请注明来源,版权归原作者所有,未经同意严禁用于任何商业用途。
微博:http://weibo.com/theworldsong
邮箱:[email protected]

你可能感兴趣的:(Android开发)