应用程序通常包括设置允许用户修改应用程序特性和行为。例如,一些应用程序允许用户指定通知是否启用或指定的频率与云应用程序同步数据。
如果你想为你的应用程序提供设置,您应该使用Android的偏好Preference来构建一个符合用户体验的界面在其他Android应用程序(包括系统设置)。本文档描述了如何使用Preference的api构建您的应用程序设置。首先我们得先强调使用这种方法与过去的activity之间有什么区别(1)main程序应继承PreferenceActivity而不是过去的activity(2)不用setContentView()方法引用布局,而是用addPreferencesFromResource(R.xml.setting),自己在资源文件夹下先新建一个xml文件,如图所示。
接着创建一个Preference布局,要注意官方文档告诉我们一定要有以下的值,key ,tittle,defalutValue,其实key是独一无二的,基本是用它来判定是哪个控件被触动了。下面我们就来看一下源代码把。
package com.example.f16_sharedpreferences02; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.EditTextPreference; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceScreen; import android.view.Menu; import android.widget.Toast; public class MainActivity extends PreferenceActivity{ @SuppressWarnings("deprecation") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.setting); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override @Deprecated public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { // TODO Auto-generated method stub //设置如果checkbox未被选中,编辑框就无法编写的功能 if("yesno_save_individual_info".equals(preference.getKey())){ Toast.makeText(this, "你好", Toast.LENGTH_LONG).show(); CheckBoxPreference checkBoxPreference=(CheckBoxPreference) findPreference("yesno_save_individual_info"); EditTextPreference editTextPreference=(EditTextPreference)findPreference("individual_name"); editTextPreference.setEnabled(checkBoxPreference.isChecked()); } return super.onPreferenceTreeClick(preferenceScreen, preference); } }
setting.xml文件
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <!-- 设置的类别 --> <PreferenceCategory android:key="mylocation" android:summary="我的位置" android:title="我的位置源" > <CheckBoxPreference android:key="wireless_network" android:summary="使用无线网络查看应用程序(例如Google地图)中的位置" android:title="使用无线网络" /> <CheckBoxPreference android:key="gps_satellite_setting" android:summary="定位时,精确到街道级别(取消选择可节约电量)" android:title="启用GPS卫星设置" /> </PreferenceCategory> <PreferenceCategory android:key="mymessage" android:summary="个人信息设置" android:title="个人信息设置" > <CheckBoxPreference android:key="yesno_save_individual_info" android:title="是否保存个人信息" /> <EditTextPreference android:key="individual_name" android:summary="请输入真实姓名" android:title="姓名 " /> <ListPreference android:entries="@array/citys" android:entryValues="@array/citys" android:key="mycity" android:summary="所属城市" android:title="所属城市" /> </PreferenceCategory> </PreferenceScreen>
系统会自动生成sharedPreferences一个文件夹储存相应的值,代码效果图如下