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);
}
}
显示的结果如下:
PreferenceFragment
在Android3.0中,Android不再建议直接让PreferenceActivity加载选项设置的布局文件。所以在上述实例中UserSettingActivity中addPreferencesFromResource(R.xml.user_settings);是不推荐使用的。一般PreferenceActivity只负责加载选项设置列表的布局文件,PreferenceFragment才负责加载选项设置的布局文件。针对上述的实例用PreferenceFragment进行修改。步骤如下:
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、同上
运行结果同上。