這才是Android設置界面的正確做法


話不多說,先上效果圖
本文參考簡書博客:《這才是Android設置界面的正確做法》寫成,在其基礎上刪改並增加了一些內容。建議新窗口打開原文,在本文講述不清楚的地方參考原文去尋找答案。
其實設置界面,不需要自己去一個一個選項地去做。Android為我們提供了一些封裝好的東西,那就是基於
SharedPreferences
的PreferenceActivity
首先在res目錄下新建一個名為「xml」的文件夾,新建preference.xml,名字可以修改(這裡的代碼可以參考原文,此處作了精簡)
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="//schemas.android.com/apk/res/android">
<PreferenceCategory android:title="設置1">
<EditTextPreference
android:key="Setting1"
android:title="我是標題"
android:summary="我是簡介" />
</PreferenceCategory>
<PreferenceCategory android:title="設置2">
<SwitchPreference
android:key="Setting2"
android:checked="true"
android:title="我是標題"
android:summary="我是簡介"
android:summaryOff="我是關閉選項時的summary"
android:summaryOn="我是開啟選項時的summary" />
</PreferenceCategory>
</PreferenceScreen>
PreferenceScree
表明這是一個設置頁面。
PreferenceCategory
可以用來區分不同類型的選項,可以設置一個title屬性作為小標題。
這裡轉載原文的解釋
支持類型
Preference
: 普通選項
EditTextPreference
: 點擊後彈出編輯框窗口的選項
SwitchPreference
: 開關選項
RingtonePreference
: 打開內容提供
CheckBoxPreference
: 帶複選按鈕
ListPreference
: 複合的單選按鈕
MultiSelectListPreference
: 複合的複選按鈕
支持屬性
key
:最多的屬性,因為Preference這個數據的存取就是使用SharedPreferences來實現的。所以保存時需要一個key的。
summary
:小標題或者叫做簡述,一般是用於對選項的簡要說明。
summaryOff
:具有開關屬性的選項關閉時的summary
summaryOn
:具有開關屬性的選項打開時的summary
title
:選項的標題
dialogTitle
:彈出消息框的標題
dialogMessage
:彈出的消息框的內容,會把MultiSelectListPreference和ListPreference的選項覆蓋
layout
:選項的布局(支持自定義)
然後在放置Java的目錄新建一個PreferenceSettings.java,名字可以修改
package 你自己的包名;
import android.os.Bundle;
import android.preference.PreferenceActivity;
public class PreferenceSettings extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.addPreferencesFromResource(R.xml.preference); // 如果剛剛的xml用了自己的文件名,此處記得修改
}
}
獲取設置內容
// 由於PreferenceScreen基於SharedPreferences,所以他的調用方法與是相似的
String DefaultUrl = PreferenceManager.getDefaultSharedPreferences(this)
.getString("DefaultUrl", ""); // 此處的getString可視需要改變為getAll, getBoolean等(具體請查找SharedPreferences相關資料)
最後記得在manifest中註冊這個Activity
<activity android:name=".你的Java文件的文件名"/>