Android开发之PreferenceActivity和PreferenceFragment
在PreferenceActivity中,給我們提供了四個選項集成控件:ListPreference,EditTextPreference,CheckBoxPreference和RingtonePreference。
注意:
通過PreferenceActivity生成的XML文件,命名方式是定死了的,生成的XML文件在data/data/<工程名>/shared_prefs/下,名字為“<工程名>_Preference.xml”,這是無法改變的。
1、PreferenceList的介紹:
api介紹:
有兩個屬性要注意:
android:entries: 設(shè)置的內(nèi)容是我們在設(shè)置時看到的內(nèi)容android:entryValues:保存在preferences.xml中的值其余屬性同上。使用如下: //這個在String里面使用 <string-array name="array_sex"><item>男</item><item>女</item> </string-array> <string-array name="array_sex_value"><item>1</item><item>2</item> </string-array>//這個在xml里面使用(layout) <ListPreferenceandroid:key="list_key"android:title="性別"android:entryValues="@array/array_sex_value"android:entries="@array/array_sex"android:dialogTitle="性別列表"android:summary="請選擇您的性別"/>?
activity:
package com.fluter.seer.flutertest;import android.os.Bundle; import android.preference.PreferenceActivity; import android.support.annotation.Nullable;public class SecondActivity extends PreferenceActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);/* 放入設(shè)置版面文件* 在這里,R.xml.mylistperference可以看作是布局文件*//** addPreferencesFromResource方法在Android3.0中就被棄用了* 但卻沒有替代方法* 谷歌的想法是,希望我們繼承PreferenceFragment來實現(xiàn)默認(rèn)選項頁* 但是這太難了。真的*/addPreferencesFromResource(R.xml.listperference);} }xml/listperference.xml
注意,這個android:key的值也是Preference文件里面的XML“鍵”名android:title 大標(biāo)題android:summary 標(biāo)題下面的小字(這個要作為選項卡才有)android:entries 彈出的對話框中,列表顯示的文本內(nèi)容,注意哦,這里指定的是一個數(shù)組哦android:entryValues 與android:entries相對應(yīng)的值android:defaultValue 當(dāng)對應(yīng)值不存在時的默認(rèn)值android:dialogTitle 彈出的對話框中的標(biāo)題信息更多的標(biāo)簽設(shè)置等你來發(fā)掘--> <PreferenceScreenxmlns:android="http://schemas.android.com/apk/res/android"android:key="screen_list"android:title="標(biāo)題"android:summary="說明摘要"><ListPreferenceandroid:key="myListPreference"android:title="標(biāo)題"android:summary="說明摘要"android:entries="@array/list_entries"android:entryValues="@array/list_entries_value"android:dialogTitle="這里是彈出框"android:defaultValue="@string/deflault_list_entries_value"></ListPreference></PreferenceScreen>string.xml
<resources><string name="app_name">FluterTest</string><string name="deflault_list_entries_value">默認(rèn)實現(xiàn)</string><string-array name="list_entries"><item>陜西</item><item>山西</item><item>河北</item></string-array><string-array name="list_entries_value"><item>老師</item><item>學(xué)生</item><item>家長</item></string-array> </resources>項目結(jié)構(gòu):
展示結(jié)果:
2、CheckBoxPreference的介紹
?
api介紹:
有兩個屬性要注意:
android:summaryOn:開啟說明 android:summaryOff:關(guān)閉說明<CheckBoxPreferenceandroid:key="check_key"android:title="自動保存進(jìn)度條"android:summaryOn="自動保存:開啟"android:summaryOff="自動保存:關(guān)閉"/>?
?
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"android:key="screen_list"android:summary="說明摘要"android:title="標(biāo)題" ><CheckBoxPreferenceandroid:key="medf"android:summaryOff="馬爾代夫未被選中"android:summaryOn="馬爾代夫被選中了"android:title="馬爾代夫" ></CheckBoxPreference><CheckBoxPreferenceandroid:key="mlqs"android:summaryOff="毛里求斯未被選中"android:summaryOn="毛里求斯被選中了"android:title="毛里求斯" ></CheckBoxPreference> </PreferenceScreen>activity修改:
package com.fluter.seer.flutertest;import android.os.Bundle; import android.preference.PreferenceActivity; import android.support.annotation.Nullable;public class SecondActivity extends PreferenceActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);/* 放入設(shè)置版面文件* 在這里,R.xml.mylistperference可以看作是布局文件*//** addPreferencesFromResource方法在Android3.0中就被棄用了* 但卻沒有替代方法* 谷歌的想法是,希望我們繼承PreferenceFragment來實現(xiàn)默認(rèn)選項頁* 但是這太難了。真的*/addPreferencesFromResource(R.xml.checkbox);} }項目結(jié)構(gòu):
展示效果:
3、EditTextPreference的介紹
api介紹:
屬性:android:dialogTitle 對話框標(biāo)題android:key 標(biāo)識keyandroid:summary簡要說明android:title標(biāo)題<EditTextPreferenceandroid:key="edt_key"android:title="填寫用戶名"android:summary="用戶名不能為空"android:dialogTitle="輸入您的用戶名"android:defaultValue="默認(rèn)值"android:dialogMessage="使用漢語"/>
xml/edittext.xml
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:key="edittext_screen" android:summary="屏幕簡要說明" android:title="屏幕標(biāo)題" > <EditTextPreference android:dialogTitle="輸入您的名稱:" android:key="editWord" android:defaultValue="im human" android:summary="簡要說明" android:title="輸入名稱" > </EditTextPreference> </PreferenceScreen>項目結(jié)構(gòu):
效果展示:
4?RingtonePreference 系統(tǒng)鈴
api介紹:
android:ringtoneType?設(shè)置響鈴模式, 主要包括ringtone、notification、alarm、all ?? android:showSilent?是否顯示靜音??<RingtonePreferenceandroid:ringtoneType="all"android:title="設(shè)置鈴鐺"android:summary="選擇鈴鐺"android:key="ring_key"android:showDefault="true"android:showSilent="true" />
rating.xml
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"><RingtonePreferenceandroid:ringtoneType="all"android:title="設(shè)置鈴鐺"android:summary="選擇鈴鐺"android:key="ring_key"android:showDefault="true"android:showSilent="true" /> </PreferenceScreen>項目結(jié)構(gòu):
?
?
在activity里面的引用:
ringtonePreference = (RingtonePreference) findPreference("ring_key"); editTextPreference = (EditTextPreference) findPreference("edt_key"); listPreference = (ListPreference) findPreference("list_key"); checkBoxPreference = (CheckBoxPreference) findPreference("check_key");事件監(jiān)聽總結(jié):?
ringtonePreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Overridepublic boolean onPreferenceChange(Preference preference, Object newValue) { //返回鈴聲所在庫的地址 String類型 如:content://media/internal/audio/media/32String uri = newValue.toString();Toast.makeText(getActivity(), ("路徑:" + uri), Toast.LENGTH_SHORT).show();return false;} }); ringtonePreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Overridepublic boolean onPreferenceClick(Preference preference) {Toast.makeText(getActivity(), "preference.getTitle():" + preference.getTitle(), Toast.LENGTH_SHORT).show();return false;} }); editTextPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Overridepublic boolean onPreferenceChange(Preference preference, Object newValue) { //返回確認(rèn)后的新值 String類型Toast.makeText(getActivity(), ((String) newValue), Toast.LENGTH_SHORT).show();return false;} });listPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Overridepublic boolean onPreferenceChange(Preference preference, Object newValue) { //返回確認(rèn)后的新值 String類型Toast.makeText(getActivity(), ((String) newValue), Toast.LENGTH_SHORT).show();return false;} });checkBoxPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Overridepublic boolean onPreferenceChange(Preference preference, Object newValue) { //返回 true false boolean類型boolean isSelected = (boolean) newValue;if (isSelected){Toast.makeText(getActivity(), "開啟", Toast.LENGTH_SHORT).show();}else {Toast.makeText(getActivity(), "關(guān)閉", Toast.LENGTH_SHORT).show();} return false;} });?
?
注意:從Android 3.0以后官方不再推薦直接讓PreferenceActivity加載選項設(shè)置布局文件,而是建議使用PreferenceFragment
第一步:創(chuàng)建frgment
package com.example.m05_preffragment01;import android.os.Bundle; import android.preference.PreferenceFragment;public class PrefFragment extends PreferenceFragment {@Overridepublic void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);//從xml文件加載選項 addPreferencesFromResource(R.xml.preferences);}}第二步:創(chuàng)建activity
package com.example.m05_preffragment01;import android.app.Activity; import android.app.FragmentManager; import android.app.FragmentTransaction;import android.os.Bundle;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//加載PrefFragmentFragmentManager fragmentManager = getFragmentManager();FragmentTransaction transaction = fragmentManager.beginTransaction();PrefFragment prefFragment = new PrefFragment();transaction.add(R.id.prefFragment, prefFragment);transaction.commit();}}第三步:創(chuàng)建preferences.xml
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" ><!-- 設(shè)置的類別 --><PreferenceCategoryandroid:key="mylocation"android:summary="我的位置"android:title="我的位置源" ><CheckBoxPreferenceandroid:key="wireless_network"android:summary="使用無線網(wǎng)絡(luò)查看應(yīng)用程序(例如Google地圖)中的位置"android:title="使用無線網(wǎng)絡(luò)" /><CheckBoxPreferenceandroid:key="gps_satellite_setting"android:summary="定位時,精確到街道級別(取消選擇可節(jié)約電量)"android:title="啟用GPS衛(wèi)星設(shè)置" /></PreferenceCategory><PreferenceCategoryandroid:key="mymessage"android:summary="個人信息設(shè)置"android:title="個人信息設(shè)置" ><CheckBoxPreferenceandroid:key="yesno_save_individual_info"android:title="是否保存?zhèn)€人信息" /><EditTextPreferenceandroid:key="individual_name"android:summary="請輸入真實姓名"android:title="姓名 " /><ListPreferenceandroid:entries="@array/cities"android:entryValues="@array/cities"android:key="mycity"android:summary="所屬城市"android:title="所屬城市" /></PreferenceCategory></PreferenceScreen>監(jiān)聽事件onPreferenceTreeClick()方法:
package com.example.m05_preffragment01;import android.os.Bundle;import android.preference.CheckBoxPreference;import android.preference.EditTextPreference;import android.preference.Preference;import android.preference.PreferenceFragment;import android.preference.PreferenceScreen;public class PrefFragment extends PreferenceFragment {@Overridepublic void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);//從xml文件加載選項 addPreferencesFromResource(R.xml.preferences);}@Overridepublic boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,Preference preference) {//如果“保存?zhèn)€人信息”這個按鈕被選中,將進(jìn)行括號里面的操作if("yesno_save_individual_info".equals(preference.getKey())) { CheckBoxPreference checkBoxPreference = (CheckBoxPreference)findPreference("yesno_save_individual_info");EditTextPreference editTextPreference = (EditTextPreference)findPreference("individual_name");//讓editTextPreference和checkBoxPreference的狀態(tài)保持一致editTextPreference.setEnabled(checkBoxPreference.isChecked());}// TODO Auto-generated method stubreturn super.onPreferenceTreeClick(preferenceScreen, preference);}}展示:
總結(jié)
以上是生活随笔為你收集整理的Android开发之PreferenceActivity和PreferenceFragment的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(2863):简单秒杀系统学习之
- 下一篇: [css] 怎样用纯CSS实现禁止鼠标