【正文】
HOULDREVIEWtext是否復(fù)習(xí)表PLAN具體內(nèi)容如圖39所示:圖39表PLAN 4. 系統(tǒng)各個(gè)模塊的具體實(shí)現(xiàn) 啟動(dòng)模塊的實(shí)現(xiàn)啟動(dòng)界面是系統(tǒng)的第一個(gè)界面,目的是給用戶一種直觀的感受,給用戶一種良好的感覺(jué)。實(shí)現(xiàn)延時(shí)效果主要使用線程來(lái)實(shí)現(xiàn)。 (savedInstanceState)。 LayoutInflater mInflater = (this)。 Thread thread = new Thread(){ public void run(){ try {(2000)。 =1。 } catch (InterruptedException e1) { // TODO Autogenerated catch block ()。()。 SharedPreferences setting = getSharedPreferences(, MODE_PRIVATE)。 File dir = new File(data/data/)。 if (!(new File()).exists()) { FileOutputStream fos。 byte[] buffer = new byte[8192]。 InputStream is = getResources().openRawResource( )。 } ()。 } catch (Exception e) { // TODO Autogenerated catch block ()。 =(BOOKNAME, )。 initWidgets()。然后根據(jù)當(dāng)前類要顯示布局文件文件來(lái)繪制整個(gè)界面。按下HOME鍵則返回手機(jī)主界面,延時(shí)暫停,再點(diǎn)擊啟動(dòng)程序時(shí)延時(shí)線程繼續(xù)運(yùn)行,直到3s后,跳到下一個(gè)界面。 用戶信息模塊的實(shí)現(xiàn),整個(gè)界面直觀明了的展示了該系統(tǒng)的主要功能以及用戶學(xué)習(xí)進(jìn)度。在界面中間上方處顯示下拉列表組件(Spinner),給用戶提供詞庫(kù)的選擇:GRE紅寶書(shū)(上),GRE紅寶書(shū)(中),GRE紅寶書(shū)(下)以及導(dǎo)入新詞庫(kù)。一個(gè)文本框用來(lái)顯示用戶學(xué)習(xí)信息:詞庫(kù)名稱,總詞匯量與創(chuàng)建時(shí)間;兩個(gè)使用進(jìn)度條分別顯示已學(xué)習(xí)list的數(shù)量與已復(fù)習(xí)list的數(shù)量。組成了一個(gè)線性布局。用戶信息主界面如圖42所示:圖42 用戶信息主界面上文提到了該界面給用戶提供詞庫(kù)選擇的下拉列表組件(Spinner),詞庫(kù)選擇則要為下拉列表定義一個(gè)適配器,這里就用到前面定義的books;同時(shí)為適配器設(shè)置下拉列表下拉時(shí)的菜單樣式;最后將適配器(adapter)添加到下拉列表上(pickBook)。()。(new OnItemSelectedListener()為下拉列表設(shè)置各種事件的響應(yīng),這個(gè)事響應(yīng)菜單被選中。對(duì)于界面左上角的兩個(gè)刪除與重置按鈕,通過(guò) onClick (View v)事件,頁(yè)面上顯示一個(gè)(對(duì)話框)dialog,dialog的樣式設(shè)置由res,界面顯示時(shí),先生成一個(gè)dialog對(duì)象,然后顯示這個(gè)dialog。實(shí)現(xiàn)詞庫(kù)的導(dǎo)入操作。 (導(dǎo)入新詞庫(kù))。 setRequestedOrientation()。 File[] files=()。 for (int i=0。i++){ fileNames[i]=files[i].getName()。 用戶單詞學(xué)習(xí)模塊的實(shí)現(xiàn)。分別為未學(xué)習(xí)過(guò)的LIST和所有的LIST;同時(shí)顯示各項(xiàng)LIST列表。界面中間顯示一個(gè)圖片按鈕和兩個(gè)文本框,構(gòu)成一個(gè)線性布局。界面底部顯示三個(gè)按鈕,構(gòu)成一個(gè)線性布局。用戶單詞學(xué)習(xí)記憶界面如圖44所示:圖44 用戶單詞學(xué)習(xí)記憶界面重復(fù)加入生詞本以后會(huì)提示:生詞本中已包含這個(gè)單詞;強(qiáng)制退出時(shí)會(huì)提示學(xué)習(xí)未完成,進(jìn)行選擇。如果用戶手機(jī)支持TTS發(fā)音功能,(loc),判斷語(yǔ)言可用后,使用Speak()((currentnum).getSpelling(),TextToSpeech.QUEUE_ADD,null)。相關(guān)代碼如下:public class TTS { ........... private ttsInitListener = new () { Override public void onInit(int status){ Locale loc = new Locale(us, , )。 } (ttsUtteranceCompletedListener)。界面的上方布局了一個(gè)文本框:?jiǎn)卧~復(fù)習(xí)。圖片按鈕為發(fā)音標(biāo)示,按鈕的屬性設(shè)置為android:drawable/btn_default,文本框分別為拼寫(spelling)與單詞解釋(info)。按鈕分別為:加入生詞本,我記得,不記得了,記對(duì)了,記錯(cuò)了。強(qiáng)制退出時(shí)會(huì)提示復(fù)習(xí)未完成,進(jìn)行選擇。進(jìn)入復(fù)習(xí)界面后,則通過(guò)getString讀取保存的list。復(fù)習(xí)完成時(shí)生成一個(gè)dialog對(duì)象,然后顯示這個(gè)dialog。 if((iftts, false)){ Thread thread =new Thread(new Runnable(){ public void run(){ try { (500)。} ...........public void onClick(DialogInterface dialog, int whichButton) { ()。 Intent intent = new Intent()。 startActivity(intent)。 用戶單詞測(cè)試模塊的實(shí)現(xiàn)。該界面的上方布局了一個(gè)文本框:?jiǎn)卧~測(cè)試。文本框的屬性設(shè)置為android:attr/textAppearanceSmall,內(nèi)容為單詞與單詞的拼寫;單選鈕組包含四個(gè)單選框(RadioButton),分別為單詞的可選解釋。按鈕分別為:下一個(gè),結(jié)束,加入生詞本。該單詞測(cè)試模塊通過(guò)單選鈕監(jiān)聽(tīng)事件setOnCheckedChangeListener()判斷組件是否被選中,給RadioGroup設(shè)置事件監(jiān)聽(tīng),然后用switch函數(shù)對(duì)用戶所選單選項(xiàng)判斷,最后通過(guò)DisplayToast事件進(jìn)行正確與否的顯示。 switch (rightAns) { case 0: if ( checkedId == () ) { score++。 } else { DisplayToast(錯(cuò)誤,正確答案是 + (opt[0]).getMeanning())。 case 1: if ( checkedId == () ) { score++。 } else { DisplayToast(錯(cuò)誤,正確答案是 + (opt[1]).getMeanning() )。 } 生詞本模塊的實(shí)現(xiàn)。當(dāng)選擇某生詞,顯示編輯該單詞與從生詞本中刪除選項(xiàng)。界面上方顯示了兩個(gè)文本框和兩個(gè)輸入文本組件(EditText),一個(gè)文本框:?jiǎn)卧~與一個(gè)輸入文本組件(單詞拼寫)構(gòu)成線性布局,另一個(gè)文本框:中文與一個(gè)輸入文本組件(中文解釋)構(gòu)成線性布局;界面中間布局了兩個(gè)按鈕:確定和取消。 Bundle bundle = new Bundle()。 (bundle)。 startActivity(intent)。進(jìn)行操作:編輯該單詞和從生詞本中刪除。 各界面之間切換的實(shí)現(xiàn)界面切換是系統(tǒng)界面設(shè)計(jì)的核心部分,實(shí)現(xiàn)兩個(gè)界面之間的切換是android界面設(shè)計(jì)的基本內(nèi)容,本系統(tǒng)主要使用Intent(意圖)實(shí)現(xiàn)界面切換。最常見(jiàn)的一種需要將數(shù)據(jù)傳到另一個(gè)Activity中 示例如下:Intent intent = new Intent(,)。//用于界面切換存放傳遞的數(shù)據(jù) (key, id)。//intent對(duì)象保存該數(shù)據(jù) startActivity(intent)。 //根據(jù)當(dāng)前Activity獲取intent對(duì)象Bundle b = ()。 //根據(jù)鍵值獲得具體數(shù)據(jù)如果第二界面要想返回結(jié)果到第一個(gè)界面,則在改寫OnActivityResult方法,啟動(dòng)第二個(gè)Activity則要使用StartActivityForResult方法。5. 客戶端界面測(cè)試 系統(tǒng)測(cè)試的目標(biāo)系統(tǒng)測(cè)試是利用一定的測(cè)試工具然后按照計(jì)劃好的測(cè)試方案、流程等對(duì)產(chǎn)品分別進(jìn)行功能、性能等的測(cè)試,甚至可以根據(jù)需要去編寫不同功能的測(cè)試工具,最后去設(shè)計(jì)和維護(hù)整個(gè)測(cè)試系統(tǒng),對(duì)測(cè)試的方案也可能出現(xiàn)的問(wèn)題進(jìn)行分析和評(píng)估。系統(tǒng)測(cè)試是整個(gè)軟件最后必須要經(jīng)歷的步驟,系統(tǒng)測(cè)試主要測(cè)試系統(tǒng)的穩(wěn)定性、健壯性等。 測(cè)試流程測(cè)試流程為:第一次打開(kāi)程序,看經(jīng)過(guò)3s后是否進(jìn)入用戶信息主界面、在主界面點(diǎn)擊各個(gè)按鈕界面的信息是否發(fā)生變化、點(diǎn)擊導(dǎo)入詞庫(kù)是否進(jìn)入SD卡文件瀏覽界面、在單詞學(xué)習(xí)界面點(diǎn)擊某個(gè)list是否進(jìn)入該list的記憶界面、點(diǎn)擊發(fā)音按鈕是否機(jī)器發(fā)音、點(diǎn)擊加入生詞本按鈕是否進(jìn)入生詞本界面、在單詞復(fù)習(xí)界面點(diǎn)擊需要復(fù)習(xí)的list是否進(jìn)入該list的復(fù)習(xí)界面、點(diǎn)擊我記得界面是否變化、點(diǎn)擊我的復(fù)習(xí)計(jì)劃是否進(jìn)入復(fù)習(xí)計(jì)劃界面、在單詞測(cè)試界面點(diǎn)擊某個(gè)list是否進(jìn)入該list的測(cè)試界面、選中一個(gè)單詞解釋后是否顯示正確判斷、在生詞本界面點(diǎn)擊一個(gè)單詞是否彈出操作選項(xiàng)、點(diǎn)擊編輯該單詞是否進(jìn)入編輯生詞本界面、點(diǎn)擊設(shè)置按鈕是否進(jìn)入設(shè)置界面、點(diǎn)擊說(shuō)明按鈕是否進(jìn)入幫助界面。 測(cè)試用例與測(cè)試結(jié)果測(cè)試用例1:顯示對(duì)話框。測(cè)試結(jié)果:點(diǎn)擊下拉按鈕出現(xiàn)了用戶信息對(duì)話框,點(diǎn)擊GRE紅寶書(shū)(中)后,用戶主界面的內(nèi)容顯示欄發(fā)生變化,詞庫(kù)名稱變?yōu)镚RE紅寶書(shū)(中),總詞匯量變?yōu)?954,創(chuàng)建時(shí)間變?yōu)楫?dāng)前時(shí)間等。點(diǎn)擊學(xué)習(xí)按鈕后是否進(jìn)入用戶單詞學(xué)習(xí)界面。測(cè)試用例3:Widget控件。測(cè)試結(jié)果:點(diǎn)擊menu后,再點(diǎn)擊add,進(jìn)入widget選擇對(duì)話框選擇該程序圖標(biāo)在主界面顯示。6. 總結(jié) 本文工作總結(jié)2014年3月底,我開(kāi)始了我的畢業(yè)論文工作,時(shí)至今日,論文基本完成。歷經(jīng)了幾個(gè)月的奮戰(zhàn),緊張而又充實(shí)的畢業(yè)設(shè)計(jì)終于落下了帷幕。由于自身一些事情,4月初才開(kāi)始著手資料的收集工作中,在搜集資料的過(guò)程中,主要在網(wǎng)上查找各類相關(guān)資料,將這些寶貴的資料全部保存在電腦上,盡量使我的資料完整、精確、數(shù)量多,這有利于論文的撰寫。畢業(yè)論文的制作給了我難忘的回憶。在這個(gè)過(guò)程中,我遇到過(guò)困難,遇到過(guò)挫折,每一步對(duì)于我來(lái)說(shuō),都是新的嘗試和挑戰(zhàn)。通過(guò)這次學(xué)習(xí)和實(shí)踐,我已經(jīng)逐步掌握了android開(kāi)發(fā)的基本方法。唯有雙倍的努力,十倍的耐性,百倍的豪情和千倍的執(zhí)著來(lái)完成我們的使命。,比如在小屏幕可以,到大屏幕就不能全屏了。,比如加載時(shí),使用線程等。參考文獻(xiàn)[1] 楊豐盛. ANDROID應(yīng)用開(kāi)發(fā)揭秘[M]. 北京:機(jī)械工業(yè)出版社,[2] 李剛. 瘋狂Android講義(第二版) . 電子工業(yè)出版社,[3] EthanandS.EngineeringEdition》,清華大學(xué)出版 社,.[11] Gasoline. 深入淺出Android–Google手持設(shè)備應(yīng)用程序設(shè)計(jì), [12] Sayed Hashimi, Satya Komatineni, Dave MacLean. Pro Android 2[M]. New York:SpringerVerlag New York Inc,致 謝本課題的設(shè)計(jì)和論文撰寫過(guò)程中,我的指導(dǎo)老師給于了極大的幫助,為我提供了大量的相關(guān)資料。在此,我對(duì)老師的指導(dǎo)表示衷心的感謝。這次論文的寫作過(guò)程,讓我收獲了很多,即為在大學(xué)四年的學(xué)習(xí)生涯上劃上了一個(gè)完美的句號(hào),為將來(lái)的人生之路做好了一個(gè)非常好的鋪墊。外文原文Beginning AndroidMark L. Murphy writeUsing XMLBased LayoutsWhile it is technically possible to create and attach widgets to our activity purely through Java code, the way we did in Chapter 4, the more mon approach is to use an XMLbased layout file. Dynamic instantiation of widgets is reserved for more plicated scenarios, where the widgets are not known at piletime (e g., populating a column of radio buttons based on data retrieved off the Internet). With that in mind, it’s time to break out the XML and learn how to lay out Android activities that way. What Is an XMLBased Layout? As the name suggests, an XMLbased layout is a