先看效果
開發環境
具體操作
利用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;
}