android preference-headers 属性,Android开发之PreferenceActivity的使用
PreferenceActivity
在開發(fā)應(yīng)用程序時(shí),有時(shí)我們會(huì)有選項(xiàng)設(shè)置界面,通常我們可以使用SharePreference以鍵值對(duì)的形式進(jìn)行保存。Android為我們提供了PreferenceActivity。PreferencesActivity是Android中專門用來實(shí)現(xiàn)程序設(shè)置界面及參數(shù)存儲(chǔ)的一個(gè)Activity。
我們只要把Activity繼承PreferenceActivity, PreferenceActivity會(huì)幫我們處理選項(xiàng)的讀寫。從Android3.0開始,官方不推薦單獨(dú)使用PreferenceActivity,而是建議PreferenceActivity與PreferenceFragment結(jié)合使用。
PreferenceActivity結(jié)合PreferenceFragment實(shí)現(xiàn)選項(xiàng)設(shè)置
官方建議PreferenceActivity與PreferenceFragment結(jié)合使用,其中PreferenceActivity負(fù)責(zé)加載選項(xiàng)配置列表的布局文件,PreferenceFragment負(fù)責(zé)加載選項(xiàng)配置的布局文件。
在res下創(chuàng)建xml目錄來創(chuàng)建布局
例如:
PreferenceActivity加載的布局如下,不是layout,而是preference-headers。
res/xml/pref_headers.xml
android:fragment="com.rair.preferenceactivitydemo.PreferenceActivityWithPreferenceFragment$GeneralPreferenceFragment"
android:icon="@drawable/ic_info_black_24dp"
android:title="@string/pref_header_general" />
我們可以通過android:fragment來指定啟動(dòng)PreferenceFragment,當(dāng)然了,也可以通過Intent來啟動(dòng)指定Activity。
android:icon="@drawable/ic_info_black_24dp"
android:title="@string/pref_header_general">
android:action="android.intent.action.VIEW"
android:data="https://www.baidu.com" />
Activity:
public class PreferenceActivityWithPreferenceFragment extends AppCompatPreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public void onBuildHeaders(List target) {
//加載選項(xiàng)列表布局
loadHeadersFromResource(R.xml.pref_headers, target);
}
/**
* 驗(yàn)證Preference是否有效
*
* @param fragmentName
* @return
*/
protected boolean isValidFragment(String fragmentName) {
return true;
}
/**
* GeneralPreferenceFragment
*/
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static class GeneralPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_general);
}
}
}
PreferenceActivity負(fù)責(zé)加載選項(xiàng)配置列表的布局文件
preference-headers根標(biāo)簽相當(dāng)于一個(gè)列表,header標(biāo)簽相當(dāng)于每個(gè)Item。
如下:
PreferenceFragment負(fù)責(zé)加載選項(xiàng)配置的布局文件
res/xml/pref_general.xml
android:capitalize="words"
android:defaultValue="@string/pref_default_display_name"
android:inputType="textCapWords"
android:key="example_text"
android:maxLines="1"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="@string/pref_title_display_name" />
android:summary="么么噠"
android:title="Rair" />
如下:
完成效果如下:
我們來看看提供了哪幾種布局元素可供使用
1.CheckBoxPreference:CheckBox選擇項(xiàng),對(duì)應(yīng)的值的ture或flase。如圖:
2.EditTextPreference:輸入編輯框,值為String類型,會(huì)彈出對(duì)話框供輸入。
3.ListPreference: 列表選擇,彈出對(duì)話框供選擇。
4.Preference:只進(jìn)行文本顯示,需要與其他進(jìn)行組合使用。
5.PreferenceCategory:用于分組。效果如下:
6.PreferenceScreen:PreferenceActivity的根元素。
7.RingtonePreference:系統(tǒng)鈴聲選擇。
8.MultiSelectListPreference:列表選擇(多選)
9.SwitchPreference:Switch
接著上面,PreferenceFragment布局修改如下:
res/xml/pref_general.xml布局
android:checked="true"
android:title="不再提醒" />
android:capitalize="words"
android:defaultValue="@string/pref_default_display_name"
android:inputType="textCapWords"
android:key="example_text"
android:maxLines="1"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="@string/pref_title_display_name" />
android:dialogTitle="城市"
android:entries="@array/city"
android:entryValues="@array/country"
android:title="列表" />
android:summary="么么噠"
android:title="Rair" />
android:entries="@array/city"
android:entryValues="@array/country"
北京
上海
廣州
深圳
A
B
C
D
效果如圖:
PreferenceCategory屬性:
key:唯一標(biāo)識(shí)(至少在同一程序中是唯一),SharedPreferences也將通過此Key值進(jìn)行數(shù)據(jù)保存,也可以通過key值獲取保存的信息。
title:顯示標(biāo)題(大字體顯示)
summary:副標(biāo)題(小字體顯示)
defaultValue:默認(rèn)值
dependency:附屬,即標(biāo)識(shí)此元素附屬于某一個(gè)元素(通常為CheckBoxPreference),dependency值為所附屬元素的key。當(dāng)CheckPreference值為true時(shí),Preference則為可用,否則為不可用。
dialogTitle:彈出對(duì)話框的標(biāo)題
entries:列表中顯示的值。為一個(gè)數(shù)組,通常通過資源文件進(jìn)行設(shè)置。
entryValues:列表中實(shí)際保存的值,與entries對(duì)應(yīng)。(上面的city和county)
寫個(gè)例子
例子直接用的Activity結(jié)合PreferenceFragment實(shí)現(xiàn)
我們用PreferenceScreen來實(shí)現(xiàn)下圖布局
res/xml/pref_my.xml布局
android:key="one"
android:summary="配置全局應(yīng)用設(shè)置"
android:title="應(yīng)用" />
android:key="two"
android:summary="配置編輯器"
android:title="編輯器" />
android:key="three"
android:summary="配置全局應(yīng)用設(shè)置"
android:title="應(yīng)用" />
android:key="four"
android:summary="配置代碼風(fēng)格"
android:title="代碼風(fēng)格" />
android:key="five"
android:summary="配置構(gòu)建運(yùn)行設(shè)置"
android:title="構(gòu)建運(yùn)行" />
android:key="six"
android:summary="配置Dropbox同步設(shè)置"
android:title="Dropbox" />
android:key="seven"
android:summary="配置Git版本控制"
android:title="Git版本控制" />
android:key="eight"
android:summary="顯示法律相關(guān)信息"
android:title="法律" />
MyFragment:
public class MyFragment extends PreferenceFragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getPreferenceManager().setSharedPreferencesMode(MODE_WORLD_READABLE);
addPreferencesFromResource(R.xml.pref_my);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Preference one = findPreference("one");
one.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Toast.makeText(getActivity(), "one", Toast.LENGTH_SHORT).show();
return true;
}
});
findPreference("two").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Toast.makeText(getActivity(), "two", Toast.LENGTH_SHORT).show();
return true;
}
});
findPreference("three").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Toast.makeText(getActivity(), "再點(diǎn)一下試試", Toast.LENGTH_SHORT).show();
return true;
}
});
findPreference("four").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Toast.makeText(getActivity(), "試試就試試", Toast.LENGTH_SHORT).show();
return true;
}
});
}
}
Activity:
public class ActivityWithPreferenceFragment extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_with_preference_fragment);
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fl, new MyFragment()).commit();
}
}
開篇有說到Preference以鍵值對(duì)的形式進(jìn)行保存,所以我給每一項(xiàng)設(shè)置了一個(gè)key。這個(gè)的作用和我們常用的id差不多,一會(huì)如果我們要引用這個(gè)組件可以通過key來找到他。
我們來加幾個(gè)點(diǎn)擊事件
OnPreferenceClickListener 用來監(jiān)聽某個(gè)選項(xiàng)是否被點(diǎn)擊
public class MyFragment extends PreferenceFragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getPreferenceManager().setSharedPreferencesMode(MODE_WORLD_READABLE);
addPreferencesFromResource(R.xml.pref_my);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Preference one = findPreference("one");
one.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Toast.makeText(getActivity(), "one", Toast.LENGTH_SHORT).show();
return true;
}
});
findPreference("two").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Toast.makeText(getActivity(), "two", Toast.LENGTH_SHORT).show();
return true;
}
});
findPreference("three").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Toast.makeText(getActivity(), "再點(diǎn)一下試試", Toast.LENGTH_SHORT).show();
return true;
}
});
findPreference("four").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Toast.makeText(getActivity(), "試試就試試", Toast.LENGTH_SHORT).show();
return true;
}
});
}
}
通過key找到對(duì)應(yīng)組件
findPreference("two").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Toast.makeText(getActivity(), "two", Toast.LENGTH_SHORT).show();
return true;
}
});
運(yùn)行一下:
總結(jié)
以上是生活随笔為你收集整理的android preference-headers 属性,Android开发之PreferenceActivity的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [css] 你有使用过css的属性bac
- 下一篇: android textwatcher