android开发之PreferenceScreen使用详解

简介

PreferenceScreen是Android提供的一种可供用户设置或者修改的组件,可以通过在xml布局文件中进行声明来创建。PreferenceScreen就是一个层次化的、带有设置项的布局,它可以嵌套里面的目录。

使用方法

1.首先在xml布局文件中创建PreferenceScreen

```xml

android:key="isMsgOpen"

android:title="消息提示开关"

android:summary="开启后,将收到消息时进行提示"

android:defaultValue="true" />

android:key="displayMode"

android:title="显示模式"

android:summary="选择喜欢的一种显示模式"

android:entries="@array/display_mode"

android:entryValues="@array/display_mode_value"

android:dialogTitle="选择显示模式" />

android:key="userName"

android:title="用户名"

android:summary="请填写用户名"

android:dialogTitle="设置用户名"

android:dialogMessage="请填写用户名" />

```

2.在Activity中调用PreferenceScreen

```java

public class SettingActivity extends PreferenceActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

addPreferencesFromResource(R.xml.setting_preference);//加载xml布局文件

}

}

```

3.声明PreferenceScreen的监听器

```java

public class SettingActivity extends PreferenceActivity implements Preference.OnPreferenceClickListener {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

addPreferencesFromResource(R.xml.setting_preference);//加载xml布局文件

// 在这里获取指定的Preference

Preference logoutPref = findPreference("logout_pref");

logoutPref.setOnPreferenceClickListener(this);

}

@Override

public boolean onPreferenceClick(Preference preference) {

switch (preference.getKey()) {

case "logout_pref":

//执行注销操作

break;

default:

break;

}

return false;

}

}

```

4.处理各个设置项的变化

```java

public class SettingActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

addPreferencesFromResource(R.xml.setting_preference);//加载xml布局文件

}

@Overridepublic void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

switch (key) {

case "isMsgOpen":

boolean isMsgOpen = sharedPreferences.getBoolean(key, false);

if(isMsgOpen) {

//开启消息提示

} else {

//关闭消息提示

}

break;

case "displayMode":

String mode = sharedPreferences.getString(key, "默认");

//修改显示模式

break;

default:

break;

}

}

@Override

protected void onResume() {

super.onResume();

//在Activity开启时添加监听器

getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);

}

@Override

protected void onPause() {

super.onPause();

//在Activity结束时移除监听器

getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);

}

}

```

案例说明

在日常开发中,我们经常使用PreferenceScreen来实现应用设置功能,比如常见的消息提醒开关、字体颜色、字体大小等。以下是一个示例:

```xml

android:key="isMsgOpen"

android:title="消息提示开关"

android:summary="开启后,将收到消息时进行提示"

android:defaultValue="true" />

android:key="ringtone"

android:title="提示音"

android:summary="选择一个提示音"

android:entries="@array/ringtoneStrs"

android:entryValues="@array/ringtoneValues"

android:dialogTitle="选择提示音" />

android:key="fontColor"

android:title="字体颜色"

android:summary="选择喜欢的一种字体颜色"

android:entries="@array/fontColorStrs"

android:entryValues="@array/fontColorValues"

android:dialogTitle="选择字体颜色" />

android:key="fontSize"

android:title="字体大小"

android:summary="选择喜欢的一种字体大小"

android:entries="@array/fontSizeStrs"

android:entryValues="@array/fontSizeValues"

android:dialogTitle="选择字体大小" />

android:key="fontType"

android:title="字体类型"

android:summary="选择喜欢的一种字体类型"

android:entries="@array/fontTypeStrs"

android:entryValues="@array/fontTypeValues"

android:dialogTitle="选择字体类型" />

android:key="about_preference"

android:title="关于我们"

android:summary="了解我们" />

android:key="logout_preference"

android:title="退出登录"

android:icon="@mipmap/ic_logout"

android:summary="退出当前账号" />

```

在Activity中调用PreferenceScreen:

```java

public class SettingActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener, Preference.OnPreferenceClickListener {

private Preference aboutPref, logoutPref;

private CheckBoxPreference isMsgOpenPref;

private ListPreference ringtonePref, fontColorPref, fontSizePref, fontTypePref;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

addPreferencesFromResource(R.xml.setting_preference);

initView();

aboutPref.setOnPreferenceClickListener(this);

logoutPref.setOnPreferenceClickListener(this);

}

@Override

public boolean onPreferenceClick(Preference preference) {

switch (preference.getKey()) {

case "about_preference":

//跳转到关于页

break;

case "logout_preference":

//执行注销操作

break;

default:

break;

}

return false;

}

private void initView() {

aboutPref = findPreference("about_preference");

logoutPref = findPreference("logout_preference");

isMsgOpenPref = (CheckBoxPreference) findPreference("isMsgOpen");

ringtonePref = (ListPreference) findPreference("ringtone");

fontColorPref = (ListPreference) findPreference("fontColor");

fontSizePref = (ListPreference) findPreference("fontSize");

fontTypePref = (ListPreference) findPreference("fontType");

}

@Override

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

switch (key) {

case "isMsgOpen":

boolean isMsgOpen = sharedPreferences.getBoolean(key, false);

if(isMsgOpen) {

//开启消息提示

} else {

//关闭消息提示

}

break;

case "ringtone":

String ringtone = sharedPreferences.getString(key, "");

//修改提示音

break;

case "fontColor":

String fontColor = sharedPreferences.getString(key, "");

//修改字体颜色

break;

case "fontSize":

String fontSize = sharedPreferences.getString(key, "");

//修改字体大小

break;

case "fontType":

String fontType = sharedPreferences.getString(key, "");

//修改字体类型

break;

default:

break;

}

}

@Override

protected void onResume() {

super.onResume();

getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);

}

@Override

protected void onPause() {

super.onPause();

getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);

}

}

```

总结

PreferenceScreen是一个非常方便的组件,可以快速方便地创建应用设置页面,我们可以对每一个设置项进行监听,以便在用户做出选择后更新我们的应用程序。同时,在使用PreferenceScreen创建设置页面时,要注意布局的层次结构,以便更好地管理和维护代码。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(48) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部