简介
PreferenceScreen是Android提供的一种可供用户设置或者修改的组件,可以通过在xml布局文件中进行声明来创建。PreferenceScreen就是一个层次化的、带有设置项的布局,它可以嵌套里面的目录。
使用方法
1.首先在xml布局文件中创建PreferenceScreen
```xml
android:title="消息提示开关" android:summary="开启后,将收到消息时进行提示" android:defaultValue="true" /> android:title="显示模式" android:summary="选择喜欢的一种显示模式" android:entries="@array/display_mode" android:entryValues="@array/display_mode_value" android:dialogTitle="选择显示模式" /> 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:title="消息提示开关" android:summary="开启后,将收到消息时进行提示" android:defaultValue="true" /> android:title="提示音" android:summary="选择一个提示音" android:entries="@array/ringtoneStrs" android:entryValues="@array/ringtoneValues" android:dialogTitle="选择提示音" /> android:title="字体颜色" android:summary="选择喜欢的一种字体颜色" android:entries="@array/fontColorStrs" android:entryValues="@array/fontColorValues" android:dialogTitle="选择字体颜色" /> android:title="字体大小" android:summary="选择喜欢的一种字体大小" android:entries="@array/fontSizeStrs" android:entryValues="@array/fontSizeValues" android:dialogTitle="选择字体大小" /> android:title="字体类型" android:summary="选择喜欢的一种字体类型" android:entries="@array/fontTypeStrs" android:entryValues="@array/fontTypeValues" android:dialogTitle="选择字体类型" /> android:title="关于我们" android:summary="了解我们" /> 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/
发表评论 取消回复