Android手機(jī)中的參數(shù)設(shè)置界面

引言

android平臺(tái)的手機(jī)上肯定會(huì)有如下圖所示的“設(shè)置”快捷方式(要么在桌面上痒谴,要么在屏幕下拉列表中),點(diǎn)擊進(jìn)入設(shè)置界面后可以進(jìn)行各種參數(shù)設(shè)置铡羡,如圖所示积蔚。


"設(shè)置"快捷方式

下面帶大家制作這個(gè)參數(shù)設(shè)置界面。

開發(fā)知識(shí)基礎(chǔ)

PreferenceActivity

PreferenceActivity間接繼承自Activity烦周,專門用于實(shí)現(xiàn)參數(shù)設(shè)置尽爆、存儲(chǔ)界面
PreferenceActivity和其他Activity的區(qū)別在于:

1.PreferenceActivity不使用普通的界面布局文件(以<LinearLayout>等標(biāo)簽開頭),而是使用專門的選項(xiàng)設(shè)置的布局文件读慎,示例如下:

普通界面布局文件:

<LinearLayout  ......
<Button ....../>
......
</LinearLayout>

專門的選項(xiàng)設(shè)置的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
<header    
android:title="常規(guī)"    
android:summary="常規(guī)設(shè)置"   
android:fragment="com.golfer.www.parametersetting.PreferenceActivityTest$Fragment1"/>
<header    
android:title="聲音設(shè)置"    
android:summary="聲音設(shè)置" 
android:fragment="com.golfer.www.parametersetting.PreferenceActivityTest$Fragment2"/>
</preference-headers>

需要指出的是
普通的界面布局文件路徑為res/layout/XXX.xml漱贱,而參數(shù)設(shè)置布局文件路徑為res/xml/XXX.xml

2.PreferenceActivity加載界面布局文件的方式不同

普通activity加載布局文件方式如下:

public void onCreate(Bundle savedInstanceState)  {  
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main)//activity.xml為待加載界面布局文件
}

PreferenceActivity加載布局文件方式如下:

public void onBuildHeaders(List<Header> target) {       
loadHeadersFromResource(R.xml.list_headers,target);
}//list_headers是待加載布局文件
Activity與Fragment

為了說明Activity和Fragment的關(guān)系,我們先來看張圖片

Fragment是Activity的片段

圖片左邊是不同新聞?lì)愋偷拿Q夭委,當(dāng)我們點(diǎn)擊其中一個(gè)后右邊會(huì)顯示該種類型的新聞幅狮。Activity是我們看到的整個(gè)界面,而左右兩邊分別兩個(gè)Fragment。
因此,其實(shí)Fragment是Activity的片段(fragment譯為“片段”),一個(gè)Activity可以包含多個(gè)Fragment

如何指定某一Activity包含哪些Fragment呢功茴?
方法一(動(dòng)態(tài)):在Activity的java文件中使用如下方法:

add(com.golfer.www.parametersetting.PreferenceActivityTest$Fragment1)
//參數(shù)指定了要增加的Fragment的路徑及名稱唐责,
//其中com.golfer.www.parametersetting為包名
//PreferenceActivityTest.java中定義了多個(gè)Fragment,
//$表示增加其中名稱為Fragment1的那個(gè)Fragment)

remove()//參數(shù)省略
replace()//參數(shù)省略

方法二(靜態(tài)):在Activity的界面布局文件中

android:fragment="com.golfer.www.parametersetting.Pr  
eferenceActivityTest$Fragment1"

對(duì)應(yīng)地,PreferenceActivity和PreferenceFragment往往配合使用
其中,PreferenceActivity的布局文件負(fù)責(zé)顯示選項(xiàng)設(shè)置列表,而PreferenceFragment的布局文件負(fù)責(zé)顯示具體的參數(shù)設(shè)置選項(xiàng)(即點(diǎn)擊選項(xiàng)設(shè)置列表其中一項(xiàng)后顯示的界面)

Fragment和Activity一樣(我們?cè)诶斫鈺r(shí)可以把Fragment理解為和Activity同地位)进每,有自己的布局文件和Java實(shí)現(xiàn)文件,下面詳細(xì)講解PreferenceFragment的布局文件:

<?xml version="1.0" encoding="utf-8"?>  
<PreferenceScreen  xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="聲音模式"> 
<ListPreference        
android:title="音量"        
android:summary="選擇低腐巢、中品追、高音量"
android:icon="@drawable/yinliang"      
android:entries="@array/size_name"         
android:dialogTitle="音量選擇"      
android:entryValues="@array/size_value"/>      
<CheckBoxPreference       
android:title="靜音模式"   
android:icon="@drawable/noyinliang"    
android:summaryOn="開啟"       
android:summaryOff="關(guān)閉"      
android:defaultValue="false" />      
</PreferenceCategory>    
<PreferenceCategory android:title="鈴音和通知">
<RingtonePreference            
android:title="來電鈴聲"            
android:summary="選擇鈴聲"    
android:icon="@drawable/call"   >  
</RingtonePreference>        
 </PreferenceCategory>
</PreferenceScreen>

其中,PreferenceCategory元素用于對(duì)參數(shù)選項(xiàng)進(jìn)行分組(即同一類型的參數(shù)設(shè)置歸為同一組冯丙,比如來電鈴聲設(shè)置肉瓦、短信鈴聲設(shè)置、其他通知鈴聲設(shè)置就可以分為一組)胃惜,用android:title指定參數(shù)組名泞莉,里面再包含具體的參數(shù)設(shè)置。

RingtonePreference元素:
點(diǎn)擊該元素后系統(tǒng)會(huì)調(diào)用手機(jī)原有的鈴聲設(shè)置模塊

CheckBoxPreference元素:
該元素旁邊有選擇框船殉,勾選后會(huì)在標(biāo)題下方顯示summaryOn對(duì)應(yīng)的字符鲫趁,沒有勾選則顯示summaryOff對(duì)應(yīng)的字符

ListPreference元素:
點(diǎn)擊該元素后,會(huì)彈出一個(gè)名稱為dialogTitle對(duì)應(yīng)的字符的列表對(duì)話框利虫,可在里面選擇其中一項(xiàng)挨厚,如示例的高音量、中音量糠惫、低音量

注:如何設(shè)置彈出的列表對(duì)話框顯示什么內(nèi)容呢疫剃?
步驟:
1.在res/values下添加arrays.xml
2.編輯arrays.xml,代碼示例如下:

<resources>    
<string-array name="size_name">      
<item>"低音量"</item>      
<item>中音量</item>       
<item>高音量</item>   
</string-array>

<string-array name="size_value">      
<item>"低音量"</item>      
<item>中音量</item>       
<item>高音量</item>   
</string-array>
</resources>

3.在ListPreference中鍵入:

android:entries="@array/size_name"
android:entryValues="@array/size_value"
//注意不要寫成@arrays硼讽,否則會(huì)報(bào)錯(cuò)巢价,
類似地,字符串資源文件命名為strings.xml固阁,
但引用字符串時(shí)寫成@string/app_name

寫完布局文件后壤躲,如何在PreferenceFragment的java文件中加載對(duì)應(yīng)的布局文件呢?示例如下:

public static class Fragment1 extends PreferenceFragment {//指明繼承關(guān)系   
    public void onCreate(Bundle savedInstanceState) {                    
      super.onCreate(savedInstanceState);       
      addPreferencesFromResource(R.xml.XXX); //關(guān)鍵方法备燃,R.xml.XXX為待加載的布局 文件  }
}
實(shí)戰(zhàn)

有了上面的知識(shí)碉克,開始開發(fā)

PreferenceActivity(命名為PreferenceActivityTest)的界面布局文件(負(fù)責(zé)顯示選項(xiàng)設(shè)置列表)

                    list_headers.xml
<?xml version="1.0" encoding="utf-8"?>
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
<header    
android:title="常規(guī)"    
android:summary="常規(guī)設(shè)置"  
android:fragment="com.golfer.www.parametersetting.PreferenceActivityTest$Fragment1"/>
<header    
android:title="聲音設(shè)置"    
android:summary="聲音設(shè)置"        
android:fragment="com.golfer.www.parametersetting.PreferenceActivityTest$Fragment2"/>    
<header        
android:title="顯示"       
android:summary="顯示設(shè)置"  
android:fragment="com.golfer.www.parametersetting.PreferenceActivityTest$Fragment3"/>
</preference-headers>

PreferenceActivity(命名為PreferenceActivityTest)的java文件(PreferenceFragment的java定義嵌入其中,作為內(nèi)部類)

             PreferenceActivityTest.java
package com.golfer.www.parametersetting;
import android.app.Fragment;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
import java.util.List;
public class PreferenceActivityTest extends PreferenceActivity {   
 @Override    
protected void onCreate(Bundle savedInstanceState) {   
 super.onCreate(savedInstanceState);}    
public void onBuildHeaders(List<Header> target)   
 { loadHeadersFromResource(R.xml.list_headers,target); }   
 public boolean isValidFragment(String FragmentName)   
 {  return true; }   
public static class Fragment1 extends PreferenceFragment {            
public void onCreate(Bundle savedInstanceState) 
{ super.onCreate(savedInstanceState);                   
  addPreferencesFromResource(R.xml.regular);  }
}       
public static class Fragment2 extends  PreferenceFragment {          
 public void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState);        
 addPreferencesFromResource(R.xml.sound);}       
 }        
public static class Fragment3 extends     
PreferenceFragment{            
public void onCreate(Bundle savedInstanceState) {                    
super.onCreate(savedInstanceState);  
addPreferencesFromResource(R.xml.display); }                
}  
}

PreferenceFragment(以Fragment1的布局文件sound.xml為例)的布局文件(負(fù)責(zé)顯示具體的參數(shù)設(shè)置選項(xiàng))

                       sound.xml
<?xml version="1.0" encoding="utf-8"?>    
<PreferenceScreen  xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="聲音模式">        
<ListPreference        
android:title="音量"            
android:summary="選擇低并齐、中漏麦、高音量"            
android:icon="@drawable/yinliang"          
android:entries="@array/size"        
android:dialogTitle="音量選擇"        
android:entryValues="@array/Size"/>   
<CheckBoxPreference      
 android:title="靜音模式"       
android:icon="@drawable/noyinliang"       
android:summaryOn="開啟"       
android:summaryOff="關(guān)閉"       
android:defaultValue="false" />       
</PreferenceCategory>    
<PreferenceCategory android:title="鈴音和通知">        
<RingtonePreference            
android:title="來電鈴聲"                    
android:summary="選擇鈴聲"            
android:icon="@drawable/call" >    
</RingtonePreference>        
<RingtonePreference            
android:title="信息鈴聲"                
android:summary="選擇鈴聲"            
android:icon="@drawable/text"   >        
</RingtonePreference>        
<RingtonePreference            
android:title="其他通知鈴聲"                
android:summary="選擇鈴聲"            
android:icon="@drawable/inform"  >            
</RingtonePreference>        
<CheckBoxPreference            
android:title="響鈴時(shí)振動(dòng)"                
android:icon="@drawable/zhendong"            
android:summaryOff="關(guān)閉"            
android:summaryOn="開啟"            
android:defaultValue="true">        
</CheckBoxPreference>    
</PreferenceCategory>
</PreferenceScreen>

成果演示:

列表界面
聲音設(shè)置界面
音量選擇對(duì)話框

開啟靜音模式

鈴聲設(shè)置

關(guān)閉振動(dòng)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末法瑟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子唁奢,更是在濱河造成了極大的恐慌,老刑警劉巖窝剖,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件麻掸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡赐纱,警方通過查閱死者的電腦和手機(jī)脊奋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疙描,“玉大人诚隙,你說我怎么就攤上這事∑鹨龋” “怎么了久又?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)效五。 經(jīng)常有香客問我地消,道長(zhǎng),這世上最難降的妖魔是什么畏妖? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任脉执,我火速辦了婚禮,結(jié)果婚禮上戒劫,老公的妹妹穿的比我還像新娘半夷。我一直安慰自己,他們只是感情好迅细,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布巫橄。 她就那樣靜靜地躺著,像睡著了一般疯攒。 火紅的嫁衣襯著肌膚如雪嗦随。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天敬尺,我揣著相機(jī)與錄音枚尼,去河邊找鬼。 笑死砂吞,一個(gè)胖子當(dāng)著我的面吹牛署恍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蜻直,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼盯质,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼袁串!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起呼巷,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤囱修,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后王悍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體破镰,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年压储,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鲜漩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡集惋,死狀恐怖孕似,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情刮刑,我是刑警寧澤喉祭,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站雷绢,受9級(jí)特大地震影響臂拓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜习寸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一胶惰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧霞溪,春花似錦孵滞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至殴蓬,卻和暖如春匿级,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背染厅。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工痘绎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肖粮。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓孤页,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親涩馆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子行施,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容