基于安卓平臺(tái)開(kāi)發(fā)的移動(dòng)應(yīng)用——用藥指南【畢業(yè)論文】_第1頁(yè)
已閱讀1頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  本科畢業(yè)論文</b></p><p><b>  (20 屆)</b></p><p>  基于安卓平臺(tái)開(kāi)發(fā)的移動(dòng)應(yīng)用——用藥指南</p><p><b>  摘要</b></p><p>  在日常的生活中,疾病是我們每個(gè)人不可避免會(huì)發(fā)生的一件

2、事。由于藥物具有兩重性,一方面可以治療疾病,另一方面也可能產(chǎn)生不良反應(yīng),因此安全、合理用藥是非常重要的。本應(yīng)用是基于安卓平臺(tái)開(kāi)發(fā)的,以java語(yǔ)言為基礎(chǔ),從合理、安全用藥的實(shí)際情況出發(fā),在了解用戶(hù)需求的基礎(chǔ)上,提出了為用戶(hù)提供用藥指南的基本目標(biāo),并且實(shí)現(xiàn)了根據(jù)病癥找藥和相關(guān)藥物的使用說(shuō)明以及病癥特征的具體介紹,幫助用戶(hù)提供用藥指導(dǎo),使用戶(hù)能夠更合理、安全的用藥。本文首先對(duì)Android的研究意義,技術(shù)簡(jiǎn)介以及開(kāi)發(fā)環(huán)境進(jìn)行介紹,然后就應(yīng)用

3、的需求進(jìn)行一定的分析,設(shè)計(jì)出應(yīng)用的流程和實(shí)現(xiàn)模塊,最后運(yùn)用Android技術(shù)實(shí)現(xiàn)應(yīng)用的開(kāi)發(fā),給出應(yīng)用的效果圖,具體介紹了應(yīng)用的各個(gè)功能模塊的設(shè)計(jì)特點(diǎn)和具體的實(shí)現(xiàn)方法。通過(guò)程序的設(shè)計(jì),了解到程序中設(shè)計(jì)的不足,最后做出總結(jié)。</p><p>  關(guān)鍵字:界面布局,ListView圖文混排,異步網(wǎng)絡(luò)請(qǐng)求數(shù)據(jù),數(shù)據(jù)解析,數(shù)據(jù)庫(kù)設(shè)計(jì)</p><p><b>  Abstract</b

4、></p><p>  In daily life, disease is unavoidable each of us one of the things will happen. Because the drug has duality, on the one hand, can cure diseases, on the other hand can also cause adverse reacti

5、ons, so it is very important to safe and rational drug use. This application is based on the android platform development, on the basis of the Java language, starting from the actual situation of reasonable, safe drug us

6、e, on the basis of the understanding of user needs, put forward to provide the basic pu</p><p>  Key words: interface layout, ListView by mixed, asynchronous network request data, data analysis, database des

7、ign</p><p><b>  目錄</b></p><p><b>  1 引言1</b></p><p>  1.1 課題研究意義1</p><p>  1.2 技術(shù)簡(jiǎn)介1</p><p>  1.3 國(guó)內(nèi)外研究情況2</p><p

8、>  1.4 開(kāi)發(fā)工具安裝2</p><p>  2 需求分析和總體設(shè)計(jì)4</p><p>  2.1 需求分析4</p><p>  2.2 功能模塊設(shè)計(jì)5</p><p>  2.3 總體框架設(shè)計(jì)和實(shí)現(xiàn)方法5</p><p>  3 首頁(yè)設(shè)計(jì)和具體實(shí)現(xiàn)6</p><p>

9、;  3.1安卓的基本控件和容器的介紹6</p><p>  3.2 首頁(yè)界面設(shè)計(jì)和實(shí)現(xiàn)6</p><p>  3.2.1首頁(yè)界面6</p><p>  3.2.2首頁(yè)布局設(shè)計(jì)7</p><p>  3.3.3首頁(yè)功能實(shí)現(xiàn)8</p><p>  4 功能模塊的設(shè)計(jì)和具體實(shí)現(xiàn)11</p><

10、;p>  4.1 保健食品11</p><p>  4.2 對(duì)癥找藥15</p><p>  4.3 家庭藥箱17</p><p><b>  4.4 搜索20</b></p><p>  5 抽屜功能的設(shè)計(jì)和具體實(shí)現(xiàn)22</p><p><b>  5.1 設(shè)置22&

11、lt;/b></p><p><b>  5.2 登錄23</b></p><p><b>  5.3 關(guān)于24</b></p><p><b>  6 結(jié)束語(yǔ)25</b></p><p><b>  7 致謝26</b></p&g

12、t;<p>  8 參考文獻(xiàn)27</p><p><b>  1 引言</b></p><p>  1.1 課題研究意義</p><p>  隨著計(jì)算機(jī)的發(fā)展和智能手機(jī)的普及,由于安卓操作系統(tǒng)的可操作性強(qiáng),使安卓迅速的成為現(xiàn)在主流的操作系統(tǒng),安卓移動(dòng)應(yīng)用也越來(lái)越受到人們的喜愛(ài)。Android是由Google推出的一款開(kāi)放的

13、嵌入式操作系統(tǒng)平臺(tái),Android聚集了來(lái)自世界各地的開(kāi)發(fā)者,越來(lái)越多的創(chuàng)意和思想被應(yīng)用到Android應(yīng)用程序的開(kāi)發(fā)中,它在國(guó)內(nèi)具有相當(dāng)強(qiáng)勁的競(jìng)爭(zhēng)優(yōu)勢(shì),Android移動(dòng)開(kāi)發(fā)平臺(tái)十分適合我國(guó)國(guó)內(nèi)的開(kāi)發(fā)環(huán)境。伴隨著Google Android操作系統(tǒng)的發(fā)展,以及移動(dòng)網(wǎng)絡(luò)的迅猛發(fā)展,基于Android應(yīng)用的移動(dòng)開(kāi)發(fā)備受關(guān)注。因此在了解AndroidSDK的基礎(chǔ)上,我開(kāi)發(fā)了一款適應(yīng)于Android操作系統(tǒng)的移動(dòng)應(yīng)用。</p>

14、<p>  本文從Android移動(dòng)開(kāi)發(fā)基礎(chǔ)出發(fā),在了解用戶(hù)需求的基礎(chǔ)上,設(shè)計(jì)出了完全適合Android操作系統(tǒng)的移動(dòng)應(yīng)用,并且詳細(xì)闡述了Android的sqlite輕量級(jí)數(shù)據(jù)庫(kù)存儲(chǔ)技術(shù)以及各個(gè)界面的布局設(shè)計(jì)過(guò)程和網(wǎng)絡(luò)請(qǐng)求數(shù)據(jù)等。</p><p><b>  1.2 技術(shù)簡(jiǎn)介</b></p><p>  安卓是由Google公司推出的基于Linux平臺(tái)的開(kāi)

15、源手機(jī)系統(tǒng),由操作系統(tǒng)、中間件、用于界面和應(yīng)用軟件組成主要適用于便攜設(shè)備。</p><p>  Android的分層結(jié)構(gòu):應(yīng)用程序、應(yīng)用程序框架、系統(tǒng)運(yùn)行庫(kù)層、Linux內(nèi)核。如圖1-1</p><p>  圖1-1Android分層結(jié)構(gòu)圖</p><p>  Android的優(yōu)點(diǎn)就是開(kāi)源,便于開(kāi)發(fā)人員更清楚的把握實(shí)現(xiàn)細(xì)節(jié),提高開(kāi)發(fā)人員的技術(shù)水平,在軟件開(kāi)發(fā)中限制相

16、對(duì)比較少,使用戶(hù)可以用到許多免費(fèi)的軟件。</p><p>  在Android中,開(kāi)發(fā)者可以使用Java作為編程語(yǔ)言來(lái)開(kāi)發(fā)應(yīng)用也可以通過(guò)C/C++等作為編程語(yǔ)言來(lái)開(kāi)發(fā)應(yīng)用程序。在Java開(kāi)發(fā)方面Android支持使用Java作為編程語(yǔ)言來(lái)開(kāi)發(fā)應(yīng)用程序,Android的java開(kāi)發(fā)從接口到功能,都有很多的變化,由于java虛擬機(jī)本身的效率和資源占用,google重新設(shè)計(jì)了Android的java,以便能提高效率和減

17、少資源的占用。</p><p>  Android本身是一個(gè)權(quán)限分立的操作系統(tǒng),在這個(gè)操作系統(tǒng)中,每個(gè)應(yīng)用都以唯一的一個(gè)系統(tǒng)識(shí)別身份運(yùn)行。系統(tǒng)的更多的安全功能通過(guò)權(quán)限機(jī)制提供。權(quán)限可以限制某個(gè)特定的進(jìn)程的特定操作,也可以限制每個(gè)URI權(quán)限對(duì)特定的數(shù)據(jù)段的訪問(wèn)。Android的安全架構(gòu)的核心設(shè)計(jì)思想是,在默認(rèn)的設(shè)置下,所有的應(yīng)用都沒(méi)有權(quán)限對(duì)其他的應(yīng)用、用戶(hù)等進(jìn)行較大的影響的操作。</p><p&

18、gt;  總而言之,Android是一款開(kāi)放式的操作系統(tǒng),并且提供了強(qiáng)大的SDK庫(kù)和開(kāi)放的理念,隨著Android的快速發(fā)展,越來(lái)越多的編程者用各種語(yǔ)言開(kāi)發(fā)Android應(yīng)用程序,受到了眾多開(kāi)發(fā)者的歡迎成為真正意義上的開(kāi)放式的操作系統(tǒng)。沒(méi)有開(kāi)發(fā)經(jīng)驗(yàn)的開(kāi)發(fā)者可以不斷學(xué)習(xí)提高開(kāi)發(fā)的能力,經(jīng)驗(yàn)豐富的開(kāi)發(fā)者可以方便的擴(kuò)展到Android移動(dòng)平臺(tái)上來(lái),利用Android的獨(dú)特功能開(kāi)發(fā)新穎的移動(dòng)應(yīng)用。</p><p>  1

19、.3 國(guó)內(nèi)外研究情況</p><p>  近年來(lái),隨著科技的迅速發(fā)展以及移動(dòng)互聯(lián)網(wǎng)的寬帶進(jìn)一步擴(kuò)展,智能手機(jī)的使用也越來(lái)越廣泛。在眾多智能手機(jī)操作系統(tǒng)中,谷歌的移動(dòng)平臺(tái)Android操作系統(tǒng)因它開(kāi)源的優(yōu)勢(shì)成為手機(jī)市場(chǎng)最受歡迎的智能操作系統(tǒng)平臺(tái)。Android的各種應(yīng)用程序在市場(chǎng)中都有比較好的發(fā)展趨勢(shì),尤其以手機(jī)移動(dòng)應(yīng)用更是受到人們的廣泛關(guān)注與喜愛(ài)。因?yàn)槭謾C(jī)移動(dòng)應(yīng)用的便攜性和實(shí)用性,使得Android手機(jī)擁有著龐

20、大的用戶(hù)人群,體現(xiàn)了Android手機(jī)應(yīng)用的巨大的發(fā)展?jié)摿?。Android系統(tǒng)自推出以來(lái),就以明顯的優(yōu)勢(shì)逐漸擴(kuò)大占有的市場(chǎng)份額,尤其在國(guó)外,android系統(tǒng)處于蓬勃發(fā)展的階段。在國(guó)內(nèi)Android系統(tǒng)的應(yīng)用已不僅局限于手機(jī)產(chǎn)業(yè),而是已經(jīng)擴(kuò)張到相關(guān)領(lǐng)域,例如平板電腦、車(chē)載系統(tǒng)、電視STB、智能電器、智能會(huì)議系統(tǒng)等。課題以研究如何在Android手機(jī)平臺(tái)上開(kāi)發(fā)手機(jī)應(yīng)用,研究學(xué)習(xí)了安卓的關(guān)鍵技術(shù)和具體的開(kāi)發(fā)環(huán)境,該應(yīng)用能夠比較完整的實(shí)現(xiàn)其功

21、能,方便人們查詢(xún)疾病和藥品,為人們的安全用藥和合理用藥提供了便利。</p><p>  1.4 開(kāi)發(fā)工具安裝</p><p>  為了在PC主機(jī)上得到Android的開(kāi)發(fā)環(huán)境,我們選擇在Windows操作系統(tǒng)中進(jìn)行對(duì)Android開(kāi)發(fā)環(huán)境的搭建,具體步驟如下:</p><p><b>  (1)JDK安裝</b></p><

22、;p>  首先下載JDK,按照提示安裝成功后,最重要的是進(jìn)行環(huán)境變量的配置,步驟如下:我的電腦->屬性->高級(jí)->環(huán)境變量->系統(tǒng)變量中添加以下環(huán)境變量:</p><p>  Java_HOME值為:C:\Program Files\Java\jdk1.6.0_20(安裝JDK的目錄)</p><p>  CLASSPATH值為:.;%Java_HOME%lib\tools.jar;

23、%Java_HOME%\lib\dt. jar;%Java _HOME%\bin;</p><p>  Path值:添加C:\Program Files\Java\jdk1.6.0_20\bin;</p><p>  (2)Eclipse安裝可下載一個(gè)綠色版的Eclipse,無(wú)需安裝,和安裝版一樣都能為Android開(kāi)發(fā)提供功能。</p><p>  (3)Andr

24、oid SDK安裝在Android Developers下載Android-sdk_r07-windows.zip,下載完成后解壓到任意路徑。</p><p>  運(yùn)行SDK Manager.exe,點(diǎn)擊Available Package。選擇希望安裝的SDK及其文檔或者其它包,點(diǎn)擊Installation Selected、Accept All、Install Accepted,開(kāi)始下載安裝所選包。</p

25、><p>  下載完成后出現(xiàn)所有Android-sdk_r07-windows文件夾內(nèi)容;</p><p><b> ?。?)ADT安裝</b></p><p>  ADT實(shí)際上是一個(gè)工具,它可以連接sdk和Eclipse,幫助Eclipse找到sdk打開(kāi)Eclipse界面,進(jìn)入進(jìn)入菜單中的“Help”-> “Install New Softwar

26、e”,點(diǎn)擊Add按鈕彈出對(duì)話框要求輸入Name和Location,完成之后,選擇Window >Preferences;在左邊的面板選擇Android,然后在右側(cè)點(diǎn)擊Browse;并選中SDK路徑,本機(jī)為;D:\YJSH\Android\Android-sdk_r07-windows;點(diǎn)擊Apply、OK。配置完成。</p><p><b> ?。?)創(chuàng)建AVD</b></p>

27、<p>  為使Android應(yīng)用程序可以在模擬器上運(yùn)行,必須創(chuàng)建AVD,步驟如下:</p><p>  在Eclipse中,選擇Windows > Android SDK and AVD Manager,點(diǎn)擊左側(cè)面板的Virtual Devices,再右側(cè)點(diǎn)擊New,填入Name,選擇Target的API,SD Card大小任意,Skin隨便選,Hardware目前保持默認(rèn)值,點(diǎn)擊Creat

28、eAVD即可完成創(chuàng)建AVD。</p><p>  2 需求分析和總體設(shè)計(jì)</p><p><b>  2.1 需求分析</b></p><p>  結(jié)合日常用藥的實(shí)際情況,根據(jù)用戶(hù)的需求,分析出主要實(shí)現(xiàn)以下幾個(gè)功能: </p><p><b>  A) 對(duì)癥找藥</b></p>&l

29、t;p>  1. 通過(guò)病癥查找病癥的具體介紹,方便人們及時(shí)發(fā)現(xiàn)疾病,預(yù)防疾病并通過(guò)病癥的介紹找到治療該疾病的藥物。</p><p>  2. 可以查尋到關(guān)于疾病的治療方法,方便人們根據(jù)自己的身體狀況找到積極治療疾病的方法。</p><p><b>  B) 保健食品</b></p><p>  1. 根據(jù)用戶(hù)的需求提供如改善睡眠等要求來(lái)查

30、找合適的保健品,根據(jù)保健品的種類(lèi)找到合適的藥物。</p><p>  2. 找到合適的藥物查詢(xún)到藥物的具體介紹食用方法、注意事項(xiàng)等。方便人們了解藥物的特性不僅給生活中用藥提供了方便還提高人們的健康意識(shí)和對(duì)藥物、保健的了解。</p><p><b>  C) 家庭藥箱</b></p><p>  1. 家庭藥箱可以動(dòng)態(tài)添加個(gè)人的藥箱,使用戶(hù)可以找

31、到自己的藥箱。</p><p>  2. 當(dāng)藥箱不需要是時(shí),可以動(dòng)態(tài)的刪除個(gè)人藥箱。</p><p><b>  D) 搜索</b></p><p>  根據(jù)要查找的藥品,用戶(hù)輸入藥品的首字母即可以查詢(xún)出藥品的名字和藥品的生產(chǎn)公司。</p><p><b>  E) 設(shè)置</b></p>

32、<p>  設(shè)置中可以設(shè)置清除緩存來(lái)清除應(yīng)用中的緩存。</p><p><b>  F) 登錄</b></p><p>  通過(guò)登錄功能可以登錄到官方網(wǎng)站查詢(xún)關(guān)于疾病和藥物的相關(guān)信息等了解疾病和做到合理、安全的用藥。</p><p><b>  G) 關(guān)于</b></p><p>  

33、簡(jiǎn)要介紹關(guān)于應(yīng)用的信息和相關(guān)的功能。</p><p>  2.2 功能模塊設(shè)計(jì)</p><p>  系統(tǒng)中的主要功能模塊及其結(jié)構(gòu)關(guān)系如圖2-1:</p><p><b>  圖2-1功能模塊圖</b></p><p>  2.3 總體框架設(shè)計(jì)和實(shí)現(xiàn)方法</p><p>  本設(shè)計(jì)按照所要實(shí)現(xiàn)的功能

34、和總體的設(shè)計(jì)分為以下的模塊如圖2-2:</p><p><b>  圖2-2功能設(shè)計(jì)圖</b></p><p>  3 首頁(yè)設(shè)計(jì)和具體實(shí)現(xiàn)</p><p>  3.1安卓的基本控件和容器的介紹</p><p> ?。?)安卓的容器常用的有LinearLayout線性布局,主要有兩種類(lèi)型,水平的線性布局和垂直的線性布局。水

35、平的線性布局就是LinearLayout中的控件按照水平的方式排列;垂直的線性布局就是LinearLayout中的控件按照垂直的方式排列。</p><p>  RelativeLayout相對(duì)布局,相對(duì)布局是一個(gè)控件的位置決定于它和其他控件的關(guān)系,相對(duì)布局的好處就是比較靈活,控件的位置擺放不像線性布局那樣單一,可以任意擺放控件的位置,但是缺點(diǎn)是掌握比較復(fù)雜,控件的位置設(shè)置比較繁瑣。</p><

36、p>  FrameLayout 框架布局,又叫幀布局,就是在一個(gè)屏幕上開(kāi)辟出一個(gè)區(qū)域以填充所有的組件,實(shí)現(xiàn)屏幕的擴(kuò)充,但是FrameLayout框架會(huì)將所有的組件都放在屏幕的左上角,而且所有的組件都是通過(guò)層疊的方式來(lái)進(jìn)行顯示,也就是說(shuō),它們都是從左上角處開(kāi)始設(shè)置,然后一個(gè)覆蓋著一個(gè)的顯示。</p><p>  容器可以進(jìn)行嵌套布局,使得布局變得更加靈活,更加方便的顯示各個(gè)組件,使得布局更加合理,可以按照開(kāi)發(fā)

37、者的意愿進(jìn)行設(shè)計(jì)。</p><p>  安卓的控件常用的有TextView文本顯示組件主要用來(lái)顯示文本信息。Button按鈕組件主要用來(lái)實(shí)現(xiàn)點(diǎn)擊的功能。EditText編輯框組件主要用來(lái)輸入文本信息。RadioButton單選鈕組件主要用來(lái)實(shí)現(xiàn)單項(xiàng)選擇的功能。ImageView圖片視圖組件主要用來(lái)實(shí)現(xiàn)圖片顯示的功能。ImageButton圖片按鈕組件主要用來(lái)實(shí)現(xiàn)含有圖片的按鈕功能。</p><

38、p>  3.2 首頁(yè)界面設(shè)計(jì)和實(shí)現(xiàn)</p><p><b>  3.2.1首頁(yè)界面</b></p><p>  首頁(yè)界面的實(shí)現(xiàn)效果如圖3-1:</p><p><b>  圖3-1首界面</b></p><p>  3.2.2首頁(yè)布局設(shè)計(jì)</p><p>  該界面采用

39、的是抽屜側(cè)滑的布局,通過(guò)查閱API來(lái)解決的,采用在Android擴(kuò)展的包中的組件DrawerLayout,是一個(gè)很好的側(cè)邊欄,支持手勢(shì)打開(kāi)主界面。首頁(yè)上部分采用的是LinearLayout完成布局設(shè)置,嵌套R(shí)elativeLayout相對(duì)布局,下部分采用的是GridView網(wǎng)格視圖設(shè)置功能模塊的布局。</p><p>  <android.support.v4.widget.DrawerLayout <

40、;/p><p>  xmlns:android="http://schemas.android.com/apk/res/android"</p><p>  xmlns:tools="http://schemas.android.com/tools"</p><p>  android:id="@+id/drawerla

41、yout"</p><p>  android:layout_width="match_parent"</p><p>  android:layout_height="match_parent" ></p><p>  設(shè)置線性布局的高度和寬度為填滿(mǎn),線性布局的排列方式設(shè)置為垂直排列。</p>

42、<p>  <LinearLayout</p><p>  android:layout_width="match_parent"</p><p>  android:layout_height="match_parent"</p><p>  android:orientation="vertica

43、l"></p><p>  設(shè)置相對(duì)布局的寬度為填滿(mǎn),高度為350dp,相對(duì)布局的背景設(shè)置為res文件夾中drawable中的圖片背景。</p><p>  <!-- 首頁(yè)布局上 --></p><p>  <RelativeLayout </p><p>  android:layout_width=&qu

44、ot;match_parent"</p><p>  android:layout_height="350dp"</p><p>  android:background="@drawable/index_logo_bg"></p><p>  設(shè)置圖片的高度和寬度為根據(jù)內(nèi)容調(diào)整,對(duì)齊方式為水平居中,垂直居中,

45、圖片設(shè)置為res文件夾中drawable中的圖片。</p><p>  <ImageView</p><p>  android:id="@+id/imageview1"</p><p>  android:layout_width="wrap_content"</p><p>  android

46、:layout_height="wrap_content"</p><p>  android:layout_centerHorizontal="true"</p><p>  android:layout_centerVertical="true"</p><p>  android:src="

47、@drawable/index_logo"/></p><p>  設(shè)置左上角的圖片的高度和寬度為根據(jù)內(nèi)容調(diào)整,與父控件的左對(duì)齊,設(shè)置距離父控件的上部10dp,圖片背景設(shè)置為res文件夾中drawable中的圖片。點(diǎn)擊左側(cè)的按鈕展開(kāi)左側(cè)抽屜。</p><p>  <ImageButton</p><p>  android:id="@

48、+id/icon_opendrawer"</p><p>  android:layout_width="wrap_content"</p><p>  android:layout_height="wrap_content"</p><p>  android:layout_alignParentLeft=&quo

49、t;true"</p><p>  android:layout_marginTop="10dp"</p><p>  android:background="@drawable/index_more_icon"/></p><p>  設(shè)置搜索框的高度和寬度為根據(jù)內(nèi)容調(diào)整,設(shè)置搜索框位于圖片下部,水平居中,

50、背景為從res文件夾中drawable讀取中的圖片,文本屬性設(shè)置為可點(diǎn)擊效果,左邊設(shè)置搜索的圖標(biāo),圖片同樣來(lái)自drawable中,對(duì)齊方式設(shè)置為垂直對(duì)齊,文本的信息內(nèi)容設(shè)置為空時(shí)顯示的文字提示信息,輸入時(shí)提示信息自動(dòng)消失,設(shè)置點(diǎn)擊操作的方法為search,點(diǎn)擊時(shí)調(diào)用search方法執(zhí)行操作。</p><p>  <TextView </p><p>  android:id=&quo

51、t;@+id/main_search"</p><p>  android:layout_width="wrap_content"</p><p>  android:layout_height="wrap_content"</p><p>  android:layout_below="@+id/imag

52、eview1"</p><p>  android:layout_centerHorizontal="true"</p><p>  android:background="@drawable/search_bg"</p><p>  android:clickable="true"</p&

53、gt;<p>  android:drawableLeft="@drawable/search_icon"</p><p>  android:gravity="center_vertical"</p><p>  android:hint="搜索藥品名:如阿司匹林,輸入aspl"</p><p&

54、gt;  android:onClick="search"/></p><p>  首頁(yè)下部的布局為網(wǎng)格布局,設(shè)置網(wǎng)格布局的高度和寬度為根據(jù)內(nèi)容調(diào)整,網(wǎng)格布局的顯示列數(shù)為兩列,設(shè)置縮放與列寬大小同步,垂直邊距和水平邊距均為1dp。</p><p>  <!-- 首頁(yè)布局下 --></p><p>  <GridView &

55、lt;/p><p>  android:id="@+id/gridview"</p><p>  android:layout_width="wrap_content"</p><p>  android:layout_height="wrap_content"</p><p>  an

56、droid:numColumns="2"</p><p>  android:stretchMode="columnWidth"</p><p>  android:verticalSpacing="1dp"</p><p>  android:horizontalSpacing="1dp&quo

57、t;</p><p><b>  /></b></p><p>  左邊的抽屜布局設(shè)置為框架布局,高度為填滿(mǎn)和,寬度為200dp,框架布局的對(duì)齊方式為左對(duì)齊,背景設(shè)置為白色。</p><p>  <!-- 左邊的抽屜 --></p><p>  <FrameLayout </p>&

58、lt;p>  android:id="@+id/left_drawer"</p><p>  android:layout_width="200dp"</p><p>  android:layout_height="match_parent"</p><p>  android:layout_gra

59、vity="left"</p><p>  android:background="#FFFFFF"></p><p>  </FrameLayout></p><p>  3.3.3首頁(yè)功能實(shí)現(xiàn)</p><p> ?。?)GridView效果實(shí)現(xiàn)</p><p&g

60、t;  采用集合接口ArrayList來(lái)動(dòng)態(tài)添加數(shù)組,添加的主要有圖片和文本信息,再使用SimpleAdapter設(shè)置將圖片和文本信息添加到GridView中,首先要先設(shè)置GridView中每項(xiàng)的布局控制文件,在相對(duì)布局中設(shè)置ImageView和TextView組件來(lái)分別設(shè)置圖片和文本信息,最后將GridView中的每項(xiàng)設(shè)置監(jiān)聽(tīng)事件setOnItemClickListener,實(shí)現(xiàn)點(diǎn)擊效果,進(jìn)入相應(yīng)的功能模塊。</p>&

61、lt;p>  ArrayList<HashMap<String, Object>> items = new ArrayList<HashMap<String, Object>>();</p><p>  for (int i = 0; i < 4; i++) {</p><p>  HashMap<String, Objec

62、t> map = new HashMap<String, Object>();</p><p>  map.put("itemImage", images[i]);</p><p>  map.put("itemText", titles[i]);</p><p>  items.add(map);</

63、p><p><b>  }</b></p><p>  SimpleAdapter saImageItems = new SimpleAdapter(this, items,</p><p>  R.layout.grid_item, new String[] { "itemImage", "itemText"

64、; },</p><p>  new int[] { R.id.image_item, R.id.text_item });</p><p>  gridView.setAdapter(saImageItems);</p><p>  gridView.setOnItemClickListener(new OnItemClickListener() {});<

65、/p><p>  (2)左側(cè)抽屜效果實(shí)現(xiàn)</p><p>  抽屜打開(kāi)效果首先找到布局中的ImageButton組件,為組件設(shè)置監(jiān)聽(tīng)setOnClickListener,使用openDrawer方法實(shí)現(xiàn)打開(kāi)左邊抽屜的效果。左邊的抽屜同樣要設(shè)置監(jiān)聽(tīng)并重寫(xiě)方法實(shí)現(xiàn)打開(kāi)展示效果。</p><p>  openButton.setOnClickListener(new OnCl

66、ickListener() {</p><p>  public void onClick(View v) {</p><p>  drawerLayout.openDrawer(Gravity.LEFT);// 從左邊拉出抽屜</p><p><b>  }</b></p><p><b>  });<

67、/b></p><p>  drawerLayout = (DrawerLayout) findViewById(R.id.drawerlayout);</p><p>  drawerLayout.setDrawerListener(new DrawerListener() {</p><p>  public void onDrawerStateChang

68、ed(int arg0) {</p><p>  // TODO Auto-generated method stub</p><p><b>  }</b></p><p>  public void onDrawerSlide(View arg0, float arg1) {</p><p>  // TODO Au

69、to-generated method stub</p><p><b>  }</b></p><p>  public void onDrawerOpened(View arg0) {</p><p>  // TODO Auto-generated method stub</p><p><b>  }&

70、lt;/b></p><p>  public void onDrawerClosed(View arg0) {</p><p>  // TODO Auto-generated method stub</p><p><b>  }</b></p><p><b>  });</b><

71、/p><p>  左側(cè)抽屜采用ListView列表顯示組件顯示,在FrameLayout中加入ListView組件,將顯示的文本信息設(shè)置,登錄,關(guān)于加入到ListView中,并對(duì)ListView設(shè)置監(jiān)聽(tīng)setOnItemClickListener實(shí)現(xiàn)點(diǎn)擊進(jìn)入相應(yīng)列表項(xiàng)的效果。</p><p>  listView = new ListView(this);</p><p&g

72、t;  listView.setAdapter(new ArrayAdapter<String>(this,</p><p>  android.R.layout.simple_expandable_list_item_1, this.data));</p><p>  ((FrameLayout) findViewById(R.id.left_drawer)).addView

73、(listView);</p><p>  listView.setOnItemClickListener(new OnItemClickListener() {});</p><p> ?。?)雙擊退出效果實(shí)現(xiàn)</p><p>  設(shè)置返回鍵的點(diǎn)擊效果,在主界面的時(shí)候,點(diǎn)擊一次提示“再按一次退出程序”,采用定時(shí)器Timer,用來(lái)在一個(gè)后臺(tái)線程計(jì)劃執(zhí)行指定任務(wù),它可

74、以按計(jì)劃一次或反復(fù)多次執(zhí)行一個(gè)任務(wù)。Timer類(lèi)執(zhí)行schedule模式,指定任務(wù)重復(fù)執(zhí)行的頻率。抽象類(lèi)TimerTask是被Timer計(jì)劃的任務(wù)。這樣可以設(shè)置在2秒內(nèi)再次按下返回鍵則退出,否則不退出該程序。</p><p>  public boolean onKeyDown(int keyCode, KeyEvent event) {</p><p>  if (keyCode ==

75、KeyEvent.KEYCODE_BACK) {</p><p>  Toast.makeText(MainActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT)</p><p><b>  .show();</b></p><p>  Timer tExit = null;</p

76、><p>  if (isExit == false) {</p><p>  isExit = true;</p><p>  tExit = new Timer();</p><p>  tExit.schedule(new TimerTask() {</p><p><b>  @Override</

77、b></p><p>  public void run() {</p><p>  isExit = false;// 退出程序</p><p><b>  }</b></p><p>  }, 2000);// 如果2秒鐘內(nèi)沒(méi)有再按下返回鍵,則啟動(dòng)定時(shí)器取消掉剛才執(zhí)行的任務(wù)</p><p&g

78、t;<b>  } else {</b></p><p><b>  finish();</b></p><p>  System.exit(0);</p><p><b>  }</b></p><p><b>  }</b></p>&l

79、t;p>  return false;</p><p><b>  }</b></p><p>  4 功能模塊的設(shè)計(jì)和具體實(shí)現(xiàn)</p><p><b>  4.1 保健食品</b></p><p>  界面效果如圖4-1,圖4-2,圖4-3,圖4-4:</p><p>

80、;  圖4-1保健食品一級(jí)界面 圖4-2保健食品二級(jí)界面</p><p>  圖4-3保健食品三級(jí)界面 圖4-4保健食品四級(jí)界面</p><p>  界面布局設(shè)計(jì)與實(shí)現(xiàn):</p><p>  圖4-1,4-2,4-3采用布局復(fù)用,使用相同的布局:</p><p>  整體采用相對(duì)布局,相對(duì)布

81、局中嵌套一個(gè)線性布局,上面的線性布局顯示界面頭部效果,下面布局顯示ListView。ListView設(shè)置高度和寬度為填滿(mǎn),位置設(shè)置在頭部LinearLayout的下部,與界面的底部對(duì)齊。</p><p>  圖4-4的布局采用的是相對(duì)布局,相對(duì)布局中嵌套兩個(gè)線性布局,顯示藥品詳情的采用的是ScrollView滾動(dòng)視圖。上面的線性布局文件加入ImageView組件設(shè)置刪除該頁(yè)面功能,圖片設(shè)置為點(diǎn)擊效果,在drawa

82、ble中btn_delete布局文件選擇器設(shè)置未點(diǎn)擊和點(diǎn)擊兩種不同的效果。</p><p>  <ImageView</p><p>  android:id="@+id/disease_top_imageView"</p><p>  android:layout_width="wrap_content"</p&

83、gt;<p>  android:layout_height="25dp"</p><p>  android:onClick="toDelete"</p><p>  android:src="@drawable/btn_delete" /></p><p>  <selecto

84、r xmlns:android="http://schemas.android.com/apk/res/android"></p><p>  <item android:drawable="@drawable/icon_bg_bottom" android:state_pressed="true"></item></

85、p><p>  <item android:drawable="@drawable/close_btn"></item></p><p>  </selector></p><p> ?。?)檢查網(wǎng)絡(luò)連接,需要在androidmanifest中設(shè)置用戶(hù)權(quán)限獲取網(wǎng)絡(luò)權(quán)限和獲取網(wǎng)絡(luò)狀態(tài),得到系統(tǒng)連接服務(wù)器的狀態(tài),返回獲

86、得代表網(wǎng)絡(luò)連接狀態(tài)的對(duì)象,判斷如果沒(méi)有網(wǎng)絡(luò)則提示請(qǐng)檢查網(wǎng)絡(luò)。代碼如下:</p><p><b>  try {</b></p><p>  ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);// 獲取系統(tǒng)的

87、連接服務(wù)</p><p>  NetworkInfo info = manager.getActiveNetworkInfo();// 獲取代表聯(lián)網(wǎng)狀態(tài)的NetWorkInfo對(duì)象</p><p>  return (info != null && info.isConnected());</p><p>  } catch (Exception e

88、) {</p><p>  return false;</p><p><b>  }</b></p><p>  if (!NetHelper.IsHaveInternet(getApplication())) {</p><p>  Toast.makeText(HealthFoodActivity.this, &q

89、uot;請(qǐng)檢查網(wǎng)絡(luò)", Toast.LENGTH_SHORT).show();</p><p><b>  }</b></p><p>  使用ProgressDialog提示網(wǎng)絡(luò)請(qǐng)求,當(dāng)進(jìn)行網(wǎng)絡(luò)請(qǐng)求時(shí)彈出進(jìn)度條對(duì)話框提示正在加載,請(qǐng)稍后,請(qǐng)求結(jié)束后進(jìn)度條對(duì)話框自動(dòng)消失。</p><p> ?。?)請(qǐng)求數(shù)據(jù),數(shù)據(jù)的請(qǐng)求可以分為同步請(qǐng)求

90、以及異步請(qǐng)求,同步請(qǐng)求就是指主線程阻塞,在主線程中使用該請(qǐng)求方法會(huì)使應(yīng)用程序阻塞而不會(huì)做出任何用戶(hù)事件。因此,在應(yīng)用程序設(shè)計(jì)時(shí),大多都是會(huì)另開(kāi)啟專(zhuān)門(mén)的子線程來(lái)響應(yīng)事件,或者用異步請(qǐng)求來(lái)代替來(lái)增加用戶(hù)的體驗(yàn)。異步請(qǐng)求會(huì)更加精準(zhǔn)控制事件。異步請(qǐng)求的優(yōu)點(diǎn)是不會(huì)阻塞當(dāng)前線程,但是相對(duì)于同步請(qǐng)求來(lái)講會(huì)相對(duì)比較復(fù)雜一些,至少要在程序中加入回調(diào)的方法來(lái)獲取異步事件響應(yīng)的數(shù)據(jù)。下面采用的是異步網(wǎng)絡(luò)請(qǐng)求。</p><p>  pu

91、blic class DrugsAsyncTask extends AsyncTask<String, Void, byte[]> {</p><p><b>  @Override</b></p><p>  protected byte[] doInBackground(String... params) {// 每次的進(jìn)度處理、可以更新ui組件<

92、;/p><p>  String url = params[0];</p><p>  // 從url中 截取到body中的信息</p><p>  byte data[] = (url.substring(url.indexOf("?") + 1)).getBytes();// ??</p><p>  json = Htt

93、pUtils.post(url, data, true);//</p><p><b>  try {</b></p><p>  JSONObject jsonObject = new JSONObject(getJsonData());</p><p>  if (jsonObject != null && jsonObje

94、ct.optBoolean("success")) {</p><p>  DataShared dataShared = new DataShared(context);</p><p>  if (!dataShared.contains(url)) {</p><p>  dataShared.beginEdit();</p>

95、<p>  dataShared.persistent(url, getJsonData());</p><p>  dataShared.endEdit();</p><p><b>  }</b></p><p><b>  }</b></p><p>  } catch (JSON

96、Exception e) {</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p>  return json;</p><p><b>  }</b></p><p><b>  @Override&

97、lt;/b></p><p>  protected void onPostExecute(byte[] result) {// 該方法將在執(zhí)行實(shí)際的后臺(tái)操作前被UI</p><p>  // thread調(diào)用,可以在該方法中做一些準(zhǔn)備工作</p><p>  super.onPostExecute(result);</p><p> 

98、 if (cb != null) {</p><p>  cb.onDataReturned(new String(result));// 引用數(shù)據(jù)類(lèi)型的強(qiáng)制轉(zhuǎn)換</p><p><b>  }</b></p><p><b>  }</b></p><p>  public static Stri

99、ng getJsonData() {</p><p>  return new String(json);</p><p><b>  }</b></p><p>  public static void startTask(Context context, ICallback cb, String url) {</p><

100、p>  drugsAsyncTask = new DrugsAsyncTask(cb, context);// 引用傳遞</p><p>  drugsAsyncTask.execute(url);</p><p><b>  }</b></p><p><b>  }</b></p><p>

101、; ?。?)回調(diào),就是客戶(hù)程序CLIENT調(diào)用服務(wù)程序SERVER中的某個(gè)函數(shù)SA,然后SERVER又在某個(gè)時(shí)候反過(guò)來(lái)調(diào)用CLIENT中的某個(gè)函數(shù)CB,對(duì)于CLIENT來(lái)說(shuō),這個(gè)CB便叫做回調(diào)函數(shù)。一般說(shuō)來(lái),CLIENT不會(huì)自己調(diào)用CB,CLIENT提供CB的目的就是讓SERVER來(lái)調(diào)用它,而且是CLIENT不得不提供。由于SERVER并不知道CLIENT提供的CB叫甚名誰(shuí),所以SERVER會(huì)約定CB的接口規(guī)范(函數(shù)原型),然后由CLI

102、ENT提前通過(guò)SERVER的一個(gè)函數(shù)R告訴SERVER自己將要使用CB函數(shù),這個(gè)過(guò)程稱(chēng)為回調(diào)函數(shù)的注冊(cè),R稱(chēng)為注冊(cè)函數(shù)。在異步請(qǐng)求工具類(lèi)中聲明一個(gè)回調(diào)接口,并實(shí)例化這個(gè)回調(diào)接口,通過(guò)post請(qǐng)求方法請(qǐng)求數(shù)據(jù),在要更新的activity中實(shí)現(xiàn)回調(diào)接口的方法,獲取異步請(qǐng)求響應(yīng)的數(shù)據(jù),通知activity進(jìn)行數(shù)據(jù)更新。利用回調(diào)和異步可以實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求數(shù)據(jù)。</p><p>  public interface ICall

103、back {</p><p><b>  /**</b></p><p>  * @param inData是下載的json數(shù)據(jù)</p><p><b>  * </b></p><p><b>  */</b></p><p>  public voi

104、d onDataReturned(String inData);</p><p><b>  }</b></p><p> ?。?)JSON數(shù)據(jù)解析:用戶(hù)請(qǐng)求回來(lái)的數(shù)據(jù)都是JSON字符串,JSON可以表示數(shù)組以及復(fù)雜的對(duì)象,并不僅僅是鍵和值的簡(jiǎn)單列表。JSON可以將JavaScript對(duì)象中表示的一組數(shù)據(jù)轉(zhuǎn)換為字符串,然后可以在函數(shù)之間簡(jiǎn)單的訪問(wèn)這些字符串,或者可以通

105、過(guò)Web客戶(hù)機(jī)將異步應(yīng)用程序中的字符傳遞給服務(wù)器端程序,用戶(hù)只有經(jīng)過(guò)解析之后才能夠使用。</p><p>  public static HealthyFood getFoodData(String JsonString) {</p><p>  HealthyFood hFood = new HealthyFood();</p><p>  List<Hea

106、lthyFoodData> list2 = new ArrayList<HealthyFoodData>();</p><p><b>  try {</b></p><p>  JSONObject root = new JSONObject(JsonString);</p><p>  hFood.setCount(roo

107、t.getInt("count"));</p><p>  hFood.setSuccess(root.getBoolean("success"));</p><p>  JSONArray array = root.getJSONArray("data");</p><p>  for (int i =

108、0; i < array.length(); i++) {</p><p>  JSONObject elementObject = array.getJSONObject(i);</p><p>  HealthyFoodData foodData = new HealthyFoodData();</p><p>  foodData.setId(eleme

109、ntObject.getInt("id"));</p><p>  foodData.setName(elementObject.getString("name"));</p><p>  foodData.setOtherName(elementObject.getString("otherName"));foodDat

110、a.setPosition(elementObject.getInt("position"));</p><p>  foodData.setRecommendCategory(elementObject</p><p>  .getString("recommendCategory"));</p><p>  list2.a

111、dd(foodData);</p><p><b>  }</b></p><p>  hFood.setList(list2);</p><p>  } catch (JSONException e) {</p><p>  // TODO Auto-generated catch block</p>&

112、lt;p>  e.printStackTrace();</p><p><b>  }</b></p><p>  return hFood;</p><p><b>  }</b></p><p><b>  4.2 對(duì)癥找藥</b></p><p&

113、gt; ?。?)界面效果如圖4-5,圖4-6,圖4-7:</p><p>  圖4-5對(duì)癥找藥一級(jí)界面 圖4-6對(duì)癥找藥二級(jí)界面</p><p>  圖4-7對(duì)癥找藥三級(jí)界面</p><p>  界面動(dòng)畫(huà)效果的設(shè)計(jì)和實(shí)現(xiàn):</p><p>  圖4-5,4-6的布局設(shè)計(jì)與保健食品的設(shè)計(jì)相同,采用布局復(fù)用,圖4-7的布局設(shè)

114、計(jì)用到了一個(gè)水平線性布局添加了疾病簡(jiǎn)介,藥物治理,推薦藥物三個(gè)文本信息的TextView組件,設(shè)置文本的比重為1,即平均設(shè)置各個(gè)文本水平擺放,并設(shè)置為居中。畫(huà)面的動(dòng)態(tài)滑動(dòng)效果使用過(guò)了ViewPager動(dòng)畫(huà)顯示組件,組件的背景取為#f6f5ec,比重分配為1,設(shè)置每個(gè)view顯示的時(shí)間長(zhǎng)為20毫秒,定義繪圖的高速緩存的持久性。</p><p>  <android.support.v4.view.ViewPa

115、ger</p><p>  android:id="@+id/vPager"</p><p>  android:layout_width="wrap_content"</p><p>  android:layout_height="wrap_content"</p><p>  

116、android:layout_below="@id/cursor"</p><p>  android:background="#f6f5ec"</p><p>  android:layout_gravity="center"</p><p>  android:layout_weight="1

117、.0"</p><p>  android:flipInterval="20"</p><p>  android:persistentDrawingCache="animation" /></p><p>  網(wǎng)絡(luò)請(qǐng)求數(shù)據(jù),解析數(shù)據(jù)等與保健食品功能模塊類(lèi)似。將請(qǐng)求得到的數(shù)據(jù)在ViewPager動(dòng)畫(huà)效果中展示,

118、ViewPager每個(gè)頁(yè)卡通過(guò)適配器加載布局,設(shè)置默認(rèn)打開(kāi)頁(yè)卡為0,ViewPager動(dòng)畫(huà)效果的偏移量設(shè)置通過(guò)設(shè)置OnPageChangeListener 監(jiān)聽(tīng)器控制,動(dòng)畫(huà)的移動(dòng)設(shè)置x和y的偏移量,實(shí)現(xiàn)動(dòng)畫(huà)的移動(dòng)效果。具體代碼如下:</p><p>  Public class MyOnPageChangeListener implements OnPageChangeListener {</p>

119、<p>  int one = 60 * 2;</p><p>  int two = one * 2;</p><p>  public void onPageSelected(int arg0) {// 此方法是頁(yè)面跳轉(zhuǎn)完后得到調(diào)用,arg0是你當(dāng)前選中的頁(yè)面的Position(位置編號(hào))</p><p>  Animation animation =

120、 null;</p><p>  switch (arg0) {</p><p><b>  case 0:</b></p><p>  if (currIndex == 1) {</p><p>  animation = new TranslateAnimation(one, 0, 0, 0);</p>

121、<p>  } else if (currIndex == 2) {</p><p>  animation = new TranslateAnimation(two, 0, 0, 0);</p><p><b>  }</b></p><p><b>  break;</b></p><p

122、><b>  case 1:</b></p><p>  if (currIndex == 0) {</p><p>  animation = new TranslateAnimation(offset, one, 0, 0);</p><p>  } else if (currIndex == 2) {</p><

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論