PreferenceActivity
PreferenceActivity是一个非常有用的基类,当进行选项配置时,选项设置会以参数的形式保存,用Preferences进行保存。当Activity类继承PreferenceActivity,该Activity不需要自己控制Preferencces的读写,PreferenceActivtity会为我们处理一切。PreferenceActivity与普通的Activity不同,它不再使用普通的界面布局文件,而是选用选项设置的布局文件。选项设置的布局文件以PreferenceScreen作为根元素——它表明定义一个参数设置的界面布局。
具体实例:
步骤:
1、为Preference创建xml资源,名为user_settings.xml。在res下创建xml文件夹,将user_settings.xml放在xml文件下。
2、新建一个UserSettingsActivity类继承PreferenceActivity的类,使用addPreferencesFromResource()显示user_setting.xml配置的布局
3、activity_main布局文件的配置
4、新建一个MainActivity来启动UserSettingActivity
具体配置内容如下:
1、配置user_settings.xml文件
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <PreferenceCategory> <EditTextPreference android:title="Password" android:summary="Set Your Password" android:key="prefUserPassword"/> </PreferenceCategory> <PreferenceCategory> <CheckBoxPreference android:defaultValue="false" android:key="prefLockScreen" android:summary="Lock The Screen With Password" android:title="Screen Lock" /> <ListPreference android:key="prefUpdateFrequency" android:title="Reminder for Updation" android:summary="Set Update Reminder Frequency" android:entries="@array/updateFrequency" android:entryValues="@array/updateFrequencyValues" /> </PreferenceCategory> </PreferenceScreen>具体分析一上内容的含义:
1)PreferenceScreen为根元素,使用PreferenceCategory对参数选项进行分组,其它元素都是用于设置相应的参数。
2)上文包括三种类型的配置,EditTextPreference、CheckBoxPreference以及ListPreference
3)属性说明:
Title:显示标题
Key:唯一标识,SharedPreferences也将通过此key值进行数据保存,也可以通过此Key值获取保存的信息。
Summary:副标题
DefaultValue:默认值
在values中新建arrays.xml文件存放相应的值
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="updateFrequency"> <item name="1">Daily</item> <item name="7">Weekly</item> <item name="3">Yearly</item> <item name="0">Never(I will Myself)</item> </string-array> <string-array name="updateFrequencyValues"> <item name="1">1</item> <item name="7">7</item> <item name="30">30</item> <item name="0">0</item> </string-array> </resources>
2、新建UserSettingsActivity类
public class UserSettingActivity extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.user_settings); } }
3、activity_main布局文件配置
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#CCCCFF" tools:context=".MainActivity" > <Button android:id="@+id/buttonSettings" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginTop="150dp" android:textSize="25sp" android:text="@string/settings" /> <TextView android:id="@+id/textViewSettings" android:textSize="21sp" android:textColor="#0000FF" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_below="@+id/buttonSettings" android:layout_marginTop="66dp" android:text="@string/NoSettings" android:textAppearance="?android:attr/textAppearanceMedium" /> </RelativeLayout>
4、新建MainActivity类
public class MainActivity extends Activity { private static final int SETTINGS_RESULT = 1; Button settingButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btnSettings=(Button)findViewById(R.id.buttonSettings); // start the UserSettingActivity when user clicks on Button btnSettings.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub Intent i = new Intent(getApplicationContext(), UserSettingActivity.class); startActivityForResult(i, SETTINGS_RESULT); } }); } //当一个Activity退出的时候回调该方法 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode==SETTINGS_RESULT) { displayUserSettings(); } } private void displayUserSettings() { SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); String settings = ""; settings=settings+"Password: " + sharedPrefs.getString("prefUserPassword", "NOPASSWORD"); settings=settings+"nRemind For Update:"+ sharedPrefs.getBoolean("prefLockScreen", false); settings=settings+"nUpdate Frequency: " + sharedPrefs.getString("prefUpdateFrequency", "NOUPDATE"); TextView textViewSetting = (TextView) findViewById(R.id.textViewSettings); textViewSetting.setText(settings); } }显示的结果如下:
步骤如下:
1、为Preference创建xml资源,名为user_settings.xml。在res下创建xml文件夹,将user_settings.xml放在xml文件下。
2、新建PrefsFragment类继承PreferenceFragment类,并使用 addPreferencesFromResource()方法加载user_settings文件。
3、创建UserSettingActivity加载PrefsFragement
4、配置activity_main.xml文件
5、新建一个MainActivity来启动UserSettingActivity
具体步骤如下:
1、同上
2、新建PrefsFragment类继承PreferenceFragment类
public class PrefsFragment extends PreferenceFragment{ @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); // 从xml文件夹中加载Preferences文件 addPreferencesFromResource(R.xml.user_settings); } }3、修改UserSettingActivity加载PrefsFragement
public class UserSettingActivity extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefsFragment()).commit(); } }4、同上
5、同上
运行结果同上。