首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android开发-详解SharedPreference/PreferenceActivity

2013-01-25 
Android开发--详解SharedPreference/PreferenceActivity我们经常看到应用程序的设置页面,一般用到设置页面

Android开发--详解SharedPreference/PreferenceActivity

    我们经常看到应用程序的设置页面,一般用到设置页面时,我们会继承自PreferenceActivity,它实现了SharedPreference,并生成相应的XML文件自动保存用户的设置,在设置页面中,每一个列表项都是一个Preference,如果要实现点击某一项有所反应,就需要实现OnPreferenceChangeListener接口,并使得某一个Preference绑定一个监听器,下面的截图是作者实现的一个设置界面:

Android开发-详解SharedPreference/PreferenceActivity

实现这个界面的XML文件如下:

public class SharedActivity extends PreferenceActivity implements OnPreferenceChangeListener{@SuppressWarnings("deprecation")@Override/* *在onCreate方法中需要做一下几点工作 *1.修改PreferenceActivity保存数据使用的XML文件的名称,在默认情况下,保存key-value对的XML文件是<package_name>_preferences.xml *在本例中我将这些键值对保存才setting中 *2.设置”姓名“列表项是否可用 *3.每一个列表项就是一个Preference对象,要实现单击响应,就必须要绑定响应的监听器 */protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//改变PreferenceActivity保存数据使用的XML文件的名称getPreferenceManager().setSharedPreferencesName("setting");//不需要设置布局文件,只需要使用如下的代码装载xml文件即可addPreferencesFromResource(R.xml.activity_shared);Preference individualNamePreference=findPreference("individual_name");//获得指向setting.xml文件的SharedPreference对象SharedPreferences sharedPreferences=individualNamePreference.getSharedPreferences();//设置姓名列表项的SummaryindividualNamePreference.setSummary(sharedPreferences.getString("individual_name", "请输入真实姓名"));Preference mobilePreference=findPreference("mobile");SharedPreferences sharedPreferences2=mobilePreference.getSharedPreferences();mobilePreference.setSummary(sharedPreferences2.getString("mobile", "请输入真实的手机号码"));//设置“姓名”列表项是否可用if(sharedPreferences.getBoolean("yesno_save_info", false)){individualNamePreference.setEnabled(true);}else {individualNamePreference.setEnabled(false);}individualNamePreference.setOnPreferenceChangeListener(this);mobilePreference.setOnPreferenceChangeListener(this);/* * 在Preference中设置使用Theme.Light主题,则打开Preference为白色主题,  * 当Preference中内嵌有其他PreferenceScreen的时候,  * 打开内嵌的PreferenceScreen则屏幕背景为黑色的. * 下面的这个方法实现的是: * 在打开内嵌PreferenceScreen的时候设置其背景色. */PreferenceScreen s= (PreferenceScreen) findPreference("other_individual_msg");  s.setOnPreferenceClickListener(new OnPreferenceClickListener() {   @Override   public boolean onPreferenceClick(Preference preference) {    PreferenceScreen a = (PreferenceScreen) preference;    a.getDialog().getWindow().    setBackgroundDrawableResource(android.R.drawable.screen_background_light);    return false;    }   }); }@SuppressWarnings("deprecation")@Overridepublic boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,Preference preference) {if("yesno_save_info".equals(preference.getKey())){findPreference("individual_name").setEnabled(!findPreference("individual_name").isEnabled());}// TODO Auto-generated method stubreturn super.onPreferenceTreeClick(preferenceScreen, preference);}/* * 必须要实现OnPreferenceChangeListener接口,该回调函数的功能是捕获列表项中的值改变后的情况 * @see android.preference.Preference.OnPreferenceChangeListener#onPreferenceChange(android.preference.Preference, java.lang.Object) */@Overridepublic boolean onPreferenceChange(Preference preference, Object newValue) {// TODO Auto-generated method stubpreference.setSummary(String.valueOf(newValue));//一定要返回true,否则列表项的值不会改变return true;}}


热点排行