先看效果
开发环境
具体操作
利用android stutio 自动生成SettingsActivity
说说机制
自动生成的SettingsActivity ,代码简洁,逻辑清晰,简明扼要…其实就一个词:代码简洁。
它不需要普通的activity那样,繁琐的去配置每个控件的标签,字体,间距等等样式
它也不需要在代码里面填写繁琐的逻辑,如何在SharedPreferences中保存这个设置信息
它只需要配置xml,内容有:每行的标题,内容,默认值
保存位置:包名_preferences.xml
标签对照
常用标签属性
- 文本输入类型
app:key= 保存SharedPreferences中的KEY
app:title= 在手机上显示的标题
app:useSimpleSummaryProvider= true/false 是否显示值内容
<EditTextPreference
app:key="SP_KEY_USERNAME"
app:title="@string/app_user_name"
app:useSimpleSummaryProvider="true" />
- 单选
app:entries= 弹出单选的内容
app:entryValues= 单选内容对应值,保存SharedPreferences中
app:key= 保存SharedPreferences中的KEY
app:useSimpleSummaryProvider= true/false 是否显示值内容
<ListPreference
app:entries="@array/module_entries"
app:entryValues="@array/module_values"
app:key="SP_KEY_MODULE"
app:title="@string/app_module"
app:useSimpleSummaryProvider="true" />
arrays.xml
<resources>
<!-- Reply Preference -->
<string-array name="module_entries">
<item>Boss3</item>
<item>Boss2</item>
<item>Boss1</item>
</string-array>
<string-array name="module_values">
<item>Boss3</item>
<item>Boss2</item>
<item>Boss1</item>
</string-array>
</resources>
监听操作
通常这样是不够的,有些数据不仅仅保存在xml中,还需要其他的操作,比如保存数据,网络请求等,那么就需要监听操作,进行相关逻辑判断处理。
具体代码:
- 找到控件
findPreference("SP_KEY_MODULE");
- 添加监听
findPreference("SP_KEY_MODULE").setOnPreferenceClickListener(this);//点击监听
findPreference("SP_KEY_MODULE").setOnPreferenceChangeListener(this);//保存监听
- 监听处理
/**
* 保存监听处理
* @param preference
* @param newValue
* @return false:不保存操作 true:保存操作
*/
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (newValue == null || TextUtils.isEmpty(newValue.toString())) {
MyToast.show("输入有误,请重新输入");
return false;
}
return true;
}
/**
* 点击监听处理 Called when a preference has been clicked.
* @param preference The preference that was clicked
* @return {@code true} if the click was handled
*/
@Override
public boolean onPreferenceClick(Preference preference) {
return false;
}