版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 本科畢業(yè)論文</b></p><p><b> ?。?0 屆)</b></p><p> 基于安卓平臺開發(fā)的移動應(yīng)用——用藥指南</p><p><b> 摘要</b></p><p> 在日常的生活中,疾病是我們每個人不可避免會發(fā)生的一件
2、事。由于藥物具有兩重性,一方面可以治療疾病,另一方面也可能產(chǎn)生不良反應(yīng),因此安全、合理用藥是非常重要的。本應(yīng)用是基于安卓平臺開發(fā)的,以java語言為基礎(chǔ),從合理、安全用藥的實際情況出發(fā),在了解用戶需求的基礎(chǔ)上,提出了為用戶提供用藥指南的基本目標,并且實現(xiàn)了根據(jù)病癥找藥和相關(guān)藥物的使用說明以及病癥特征的具體介紹,幫助用戶提供用藥指導(dǎo),使用戶能夠更合理、安全的用藥。本文首先對Android的研究意義,技術(shù)簡介以及開發(fā)環(huán)境進行介紹,然后就應(yīng)用
3、的需求進行一定的分析,設(shè)計出應(yīng)用的流程和實現(xiàn)模塊,最后運用Android技術(shù)實現(xiàn)應(yīng)用的開發(fā),給出應(yīng)用的效果圖,具體介紹了應(yīng)用的各個功能模塊的設(shè)計特點和具體的實現(xiàn)方法。通過程序的設(shè)計,了解到程序中設(shè)計的不足,最后做出總結(jié)。</p><p> 關(guān)鍵字:界面布局,ListView圖文混排,異步網(wǎng)絡(luò)請求數(shù)據(jù),數(shù)據(jù)解析,數(shù)據(jù)庫設(shè)計</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ù)簡介1</p><p> 1.3 國內(nèi)外研究情況2</p><p
8、> 1.4 開發(fā)工具安裝2</p><p> 2 需求分析和總體設(shè)計4</p><p> 2.1 需求分析4</p><p> 2.2 功能模塊設(shè)計5</p><p> 2.3 總體框架設(shè)計和實現(xiàn)方法5</p><p> 3 首頁設(shè)計和具體實現(xiàn)6</p><p>
9、; 3.1安卓的基本控件和容器的介紹6</p><p> 3.2 首頁界面設(shè)計和實現(xiàn)6</p><p> 3.2.1首頁界面6</p><p> 3.2.2首頁布局設(shè)計7</p><p> 3.3.3首頁功能實現(xiàn)8</p><p> 4 功能模塊的設(shè)計和具體實現(xiàn)11</p><
10、;p> 4.1 保健食品11</p><p> 4.2 對癥找藥15</p><p> 4.3 家庭藥箱17</p><p><b> 4.4 搜索20</b></p><p> 5 抽屜功能的設(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é)束語25</b></p><p><b> 7 致謝26</b></p&g
12、t;<p> 8 參考文獻27</p><p><b> 1 引言</b></p><p> 1.1 課題研究意義</p><p> 隨著計算機的發(fā)展和智能手機的普及,由于安卓操作系統(tǒng)的可操作性強,使安卓迅速的成為現(xiàn)在主流的操作系統(tǒng),安卓移動應(yīng)用也越來越受到人們的喜愛。Android是由Google推出的一款開放的
13、嵌入式操作系統(tǒng)平臺,Android聚集了來自世界各地的開發(fā)者,越來越多的創(chuàng)意和思想被應(yīng)用到Android應(yīng)用程序的開發(fā)中,它在國內(nèi)具有相當強勁的競爭優(yōu)勢,Android移動開發(fā)平臺十分適合我國國內(nèi)的開發(fā)環(huán)境。伴隨著Google Android操作系統(tǒng)的發(fā)展,以及移動網(wǎng)絡(luò)的迅猛發(fā)展,基于Android應(yīng)用的移動開發(fā)備受關(guān)注。因此在了解AndroidSDK的基礎(chǔ)上,我開發(fā)了一款適應(yīng)于Android操作系統(tǒng)的移動應(yīng)用。</p>
14、<p> 本文從Android移動開發(fā)基礎(chǔ)出發(fā),在了解用戶需求的基礎(chǔ)上,設(shè)計出了完全適合Android操作系統(tǒng)的移動應(yīng)用,并且詳細闡述了Android的sqlite輕量級數(shù)據(jù)庫存儲技術(shù)以及各個界面的布局設(shè)計過程和網(wǎng)絡(luò)請求數(shù)據(jù)等。</p><p><b> 1.2 技術(shù)簡介</b></p><p> 安卓是由Google公司推出的基于Linux平臺的開
15、源手機系統(tǒng),由操作系統(tǒng)、中間件、用于界面和應(yīng)用軟件組成主要適用于便攜設(shè)備。</p><p> Android的分層結(jié)構(gòu):應(yīng)用程序、應(yīng)用程序框架、系統(tǒng)運行庫層、Linux內(nèi)核。如圖1-1</p><p> 圖1-1Android分層結(jié)構(gòu)圖</p><p> Android的優(yōu)點就是開源,便于開發(fā)人員更清楚的把握實現(xiàn)細節(jié),提高開發(fā)人員的技術(shù)水平,在軟件開發(fā)中限制相
16、對比較少,使用戶可以用到許多免費的軟件。</p><p> 在Android中,開發(fā)者可以使用Java作為編程語言來開發(fā)應(yīng)用也可以通過C/C++等作為編程語言來開發(fā)應(yīng)用程序。在Java開發(fā)方面Android支持使用Java作為編程語言來開發(fā)應(yīng)用程序,Android的java開發(fā)從接口到功能,都有很多的變化,由于java虛擬機本身的效率和資源占用,google重新設(shè)計了Android的java,以便能提高效率和減
17、少資源的占用。</p><p> Android本身是一個權(quán)限分立的操作系統(tǒng),在這個操作系統(tǒng)中,每個應(yīng)用都以唯一的一個系統(tǒng)識別身份運行。系統(tǒng)的更多的安全功能通過權(quán)限機制提供。權(quán)限可以限制某個特定的進程的特定操作,也可以限制每個URI權(quán)限對特定的數(shù)據(jù)段的訪問。Android的安全架構(gòu)的核心設(shè)計思想是,在默認的設(shè)置下,所有的應(yīng)用都沒有權(quán)限對其他的應(yīng)用、用戶等進行較大的影響的操作。</p><p&
18、gt; 總而言之,Android是一款開放式的操作系統(tǒng),并且提供了強大的SDK庫和開放的理念,隨著Android的快速發(fā)展,越來越多的編程者用各種語言開發(fā)Android應(yīng)用程序,受到了眾多開發(fā)者的歡迎成為真正意義上的開放式的操作系統(tǒng)。沒有開發(fā)經(jīng)驗的開發(fā)者可以不斷學習提高開發(fā)的能力,經(jīng)驗豐富的開發(fā)者可以方便的擴展到Android移動平臺上來,利用Android的獨特功能開發(fā)新穎的移動應(yīng)用。</p><p> 1
19、.3 國內(nèi)外研究情況</p><p> 近年來,隨著科技的迅速發(fā)展以及移動互聯(lián)網(wǎng)的寬帶進一步擴展,智能手機的使用也越來越廣泛。在眾多智能手機操作系統(tǒng)中,谷歌的移動平臺Android操作系統(tǒng)因它開源的優(yōu)勢成為手機市場最受歡迎的智能操作系統(tǒng)平臺。Android的各種應(yīng)用程序在市場中都有比較好的發(fā)展趨勢,尤其以手機移動應(yīng)用更是受到人們的廣泛關(guān)注與喜愛。因為手機移動應(yīng)用的便攜性和實用性,使得Android手機擁有著龐
20、大的用戶人群,體現(xiàn)了Android手機應(yīng)用的巨大的發(fā)展?jié)摿?。Android系統(tǒng)自推出以來,就以明顯的優(yōu)勢逐漸擴大占有的市場份額,尤其在國外,android系統(tǒng)處于蓬勃發(fā)展的階段。在國內(nèi)Android系統(tǒng)的應(yīng)用已不僅局限于手機產(chǎn)業(yè),而是已經(jīng)擴張到相關(guān)領(lǐng)域,例如平板電腦、車載系統(tǒng)、電視STB、智能電器、智能會議系統(tǒng)等。課題以研究如何在Android手機平臺上開發(fā)手機應(yīng)用,研究學習了安卓的關(guān)鍵技術(shù)和具體的開發(fā)環(huán)境,該應(yīng)用能夠比較完整的實現(xiàn)其功
21、能,方便人們查詢疾病和藥品,為人們的安全用藥和合理用藥提供了便利。</p><p> 1.4 開發(fā)工具安裝</p><p> 為了在PC主機上得到Android的開發(fā)環(huán)境,我們選擇在Windows操作系統(tǒng)中進行對Android開發(fā)環(huán)境的搭建,具體步驟如下:</p><p><b> ?。?)JDK安裝</b></p><
22、;p> 首先下載JDK,按照提示安裝成功后,最重要的是進行環(huán)境變量的配置,步驟如下:我的電腦->屬性->高級->環(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安裝可下載一個綠色版的Eclipse,無需安裝,和安裝版一樣都能為Android開發(fā)提供功能。</p><p> (3)Andr
24、oid SDK安裝在Android Developers下載Android-sdk_r07-windows.zip,下載完成后解壓到任意路徑。</p><p> 運行SDK Manager.exe,點擊Available Package。選擇希望安裝的SDK及其文檔或者其它包,點擊Installation Selected、Accept All、Install Accepted,開始下載安裝所選包。</p
25、><p> 下載完成后出現(xiàn)所有Android-sdk_r07-windows文件夾內(nèi)容;</p><p><b> ?。?)ADT安裝</b></p><p> ADT實際上是一個工具,它可以連接sdk和Eclipse,幫助Eclipse找到sdk打開Eclipse界面,進入進入菜單中的“Help”-> “Install New Softwar
26、e”,點擊Add按鈕彈出對話框要求輸入Name和Location,完成之后,選擇Window >Preferences;在左邊的面板選擇Android,然后在右側(cè)點擊Browse;并選中SDK路徑,本機為;D:\YJSH\Android\Android-sdk_r07-windows;點擊Apply、OK。配置完成。</p><p><b> ?。?)創(chuàng)建AVD</b></p>
27、<p> 為使Android應(yīng)用程序可以在模擬器上運行,必須創(chuàng)建AVD,步驟如下:</p><p> 在Eclipse中,選擇Windows > Android SDK and AVD Manager,點擊左側(cè)面板的Virtual Devices,再右側(cè)點擊New,填入Name,選擇Target的API,SD Card大小任意,Skin隨便選,Hardware目前保持默認值,點擊Creat
28、eAVD即可完成創(chuàng)建AVD。</p><p> 2 需求分析和總體設(shè)計</p><p><b> 2.1 需求分析</b></p><p> 結(jié)合日常用藥的實際情況,根據(jù)用戶的需求,分析出主要實現(xiàn)以下幾個功能: </p><p><b> A) 對癥找藥</b></p>&l
29、t;p> 1. 通過病癥查找病癥的具體介紹,方便人們及時發(fā)現(xiàn)疾病,預(yù)防疾病并通過病癥的介紹找到治療該疾病的藥物。</p><p> 2. 可以查尋到關(guān)于疾病的治療方法,方便人們根據(jù)自己的身體狀況找到積極治療疾病的方法。</p><p><b> B) 保健食品</b></p><p> 1. 根據(jù)用戶的需求提供如改善睡眠等要求來查
30、找合適的保健品,根據(jù)保健品的種類找到合適的藥物。</p><p> 2. 找到合適的藥物查詢到藥物的具體介紹食用方法、注意事項等。方便人們了解藥物的特性不僅給生活中用藥提供了方便還提高人們的健康意識和對藥物、保健的了解。</p><p><b> C) 家庭藥箱</b></p><p> 1. 家庭藥箱可以動態(tài)添加個人的藥箱,使用戶可以找
31、到自己的藥箱。</p><p> 2. 當藥箱不需要是時,可以動態(tài)的刪除個人藥箱。</p><p><b> D) 搜索</b></p><p> 根據(jù)要查找的藥品,用戶輸入藥品的首字母即可以查詢出藥品的名字和藥品的生產(chǎn)公司。</p><p><b> E) 設(shè)置</b></p>
32、<p> 設(shè)置中可以設(shè)置清除緩存來清除應(yīng)用中的緩存。</p><p><b> F) 登錄</b></p><p> 通過登錄功能可以登錄到官方網(wǎng)站查詢關(guān)于疾病和藥物的相關(guān)信息等了解疾病和做到合理、安全的用藥。</p><p><b> G) 關(guān)于</b></p><p>
33、簡要介紹關(guān)于應(yīng)用的信息和相關(guān)的功能。</p><p> 2.2 功能模塊設(shè)計</p><p> 系統(tǒng)中的主要功能模塊及其結(jié)構(gòu)關(guān)系如圖2-1:</p><p><b> 圖2-1功能模塊圖</b></p><p> 2.3 總體框架設(shè)計和實現(xiàn)方法</p><p> 本設(shè)計按照所要實現(xiàn)的功能
34、和總體的設(shè)計分為以下的模塊如圖2-2:</p><p><b> 圖2-2功能設(shè)計圖</b></p><p> 3 首頁設(shè)計和具體實現(xiàn)</p><p> 3.1安卓的基本控件和容器的介紹</p><p> ?。?)安卓的容器常用的有LinearLayout線性布局,主要有兩種類型,水平的線性布局和垂直的線性布局。水
35、平的線性布局就是LinearLayout中的控件按照水平的方式排列;垂直的線性布局就是LinearLayout中的控件按照垂直的方式排列。</p><p> RelativeLayout相對布局,相對布局是一個控件的位置決定于它和其他控件的關(guān)系,相對布局的好處就是比較靈活,控件的位置擺放不像線性布局那樣單一,可以任意擺放控件的位置,但是缺點是掌握比較復(fù)雜,控件的位置設(shè)置比較繁瑣。</p><
36、p> FrameLayout 框架布局,又叫幀布局,就是在一個屏幕上開辟出一個區(qū)域以填充所有的組件,實現(xiàn)屏幕的擴充,但是FrameLayout框架會將所有的組件都放在屏幕的左上角,而且所有的組件都是通過層疊的方式來進行顯示,也就是說,它們都是從左上角處開始設(shè)置,然后一個覆蓋著一個的顯示。</p><p> 容器可以進行嵌套布局,使得布局變得更加靈活,更加方便的顯示各個組件,使得布局更加合理,可以按照開發(fā)
37、者的意愿進行設(shè)計。</p><p> 安卓的控件常用的有TextView文本顯示組件主要用來顯示文本信息。Button按鈕組件主要用來實現(xiàn)點擊的功能。EditText編輯框組件主要用來輸入文本信息。RadioButton單選鈕組件主要用來實現(xiàn)單項選擇的功能。ImageView圖片視圖組件主要用來實現(xiàn)圖片顯示的功能。ImageButton圖片按鈕組件主要用來實現(xiàn)含有圖片的按鈕功能。</p><
38、p> 3.2 首頁界面設(shè)計和實現(xiàn)</p><p><b> 3.2.1首頁界面</b></p><p> 首頁界面的實現(xiàn)效果如圖3-1:</p><p><b> 圖3-1首界面</b></p><p> 3.2.2首頁布局設(shè)計</p><p> 該界面采用
39、的是抽屜側(cè)滑的布局,通過查閱API來解決的,采用在Android擴展的包中的組件DrawerLayout,是一個很好的側(cè)邊欄,支持手勢打開主界面。首頁上部分采用的是LinearLayout完成布局設(shè)置,嵌套RelativeLayout相對布局,下部分采用的是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è)置線性布局的高度和寬度為填滿,線性布局的排列方式設(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è)置相對布局的寬度為填滿,高度為350dp,相對布局的背景設(shè)置為res文件夾中drawable中的圖片背景。</p><p> <!-- 首頁布局上 --></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)整,對齊方式為水平居中,垂直居中,
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)整,與父控件的左對齊,設(shè)置距離父控件的上部10dp,圖片背景設(shè)置為res文件夾中drawable中的圖片。點擊左側(cè)的按鈕展開左側(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è)置為可點擊效果,左邊設(shè)置搜索的圖標,圖片同樣來自drawable中,對齊方式設(shè)置為垂直對齊,文本的信息內(nèi)容設(shè)置為空時顯示的文字提示信息,輸入時提示信息自動消失,設(shè)置點擊操作的方法為search,點擊時調(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> 首頁下部的布局為網(wǎng)格布局,設(shè)置網(wǎng)格布局的高度和寬度為根據(jù)內(nèi)容調(diào)整,網(wǎng)格布局的顯示列數(shù)為兩列,設(shè)置縮放與列寬大小同步,垂直邊距和水平邊距均為1dp。</p><p> <!-- 首頁布局下 --></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è)置為框架布局,高度為填滿和,寬度為200dp,框架布局的對齊方式為左對齊,背景設(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首頁功能實現(xiàn)</p><p> ?。?)GridView效果實現(xiàn)</p><p&g
60、t; 采用集合接口ArrayList來動態(tài)添加數(shù)組,添加的主要有圖片和文本信息,再使用SimpleAdapter設(shè)置將圖片和文本信息添加到GridView中,首先要先設(shè)置GridView中每項的布局控制文件,在相對布局中設(shè)置ImageView和TextView組件來分別設(shè)置圖片和文本信息,最后將GridView中的每項設(shè)置監(jiān)聽事件setOnItemClickListener,實現(xià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> ?。?)左側(cè)抽屜效果實現(xiàn)</p><p> 抽屜打開效果首先找到布局中的ImageButton組件,為組件設(shè)置監(jiān)聽setOnClickListener,使用openDrawer方法實現(xiàn)打開左邊抽屜的效果。左邊的抽屜同樣要設(shè)置監(jiān)聽并重寫方法實現(xiàn)打開展示效果。</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中,并對ListView設(shè)置監(jiān)聽setOnItemClickListener實現(xiàn)點擊進入相應(yī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> ?。?)雙擊退出效果實現(xiàn)</p><p> 設(shè)置返回鍵的點擊效果,在主界面的時候,點擊一次提示“再按一次退出程序”,采用定時器Timer,用來在一個后臺線程計劃執(zhí)行指定任務(wù),它可
74、以按計劃一次或反復(fù)多次執(zhí)行一個任務(wù)。Timer類執(zhí)行schedule模式,指定任務(wù)重復(fù)執(zhí)行的頻率。抽象類TimerTask是被Timer計劃的任務(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)沒有再按下返回鍵,則啟動定時器取消掉剛才執(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è)計和具體實現(xiàn)</p><p><b> 4.1 保健食品</b></p><p> 界面效果如圖4-1,圖4-2,圖4-3,圖4-4:</p><p>
80、; 圖4-1保健食品一級界面 圖4-2保健食品二級界面</p><p> 圖4-3保健食品三級界面 圖4-4保健食品四級界面</p><p> 界面布局設(shè)計與實現(xiàn):</p><p> 圖4-1,4-2,4-3采用布局復(fù)用,使用相同的布局:</p><p> 整體采用相對布局,相對布
81、局中嵌套一個線性布局,上面的線性布局顯示界面頭部效果,下面布局顯示ListView。ListView設(shè)置高度和寬度為填滿,位置設(shè)置在頭部LinearLayout的下部,與界面的底部對齊。</p><p> 圖4-4的布局采用的是相對布局,相對布局中嵌套兩個線性布局,顯示藥品詳情的采用的是ScrollView滾動視圖。上面的線性布局文件加入ImageView組件設(shè)置刪除該頁面功能,圖片設(shè)置為點擊效果,在drawa
82、ble中btn_delete布局文件選擇器設(shè)置未點擊和點擊兩種不同的效果。</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è)置用戶權(quán)限獲取網(wǎng)絡(luò)權(quán)限和獲取網(wǎng)絡(luò)狀態(tài),得到系統(tǒng)連接服務(wù)器的狀態(tài),返回獲
86、得代表網(wǎng)絡(luò)連接狀態(tài)的對象,判斷如果沒有網(wǎng)絡(luò)則提示請檢查網(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對象</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;請檢查網(wǎng)絡(luò)", Toast.LENGTH_SHORT).show();</p><p><b> }</b></p><p> 使用ProgressDialog提示網(wǎng)絡(luò)請求,當進行網(wǎng)絡(luò)請求時彈出進度條對話框提示正在加載,請稍后,請求結(jié)束后進度條對話框自動消失。</p><p> ?。?)請求數(shù)據(jù),數(shù)據(jù)的請求可以分為同步請求
90、以及異步請求,同步請求就是指主線程阻塞,在主線程中使用該請求方法會使應(yīng)用程序阻塞而不會做出任何用戶事件。因此,在應(yīng)用程序設(shè)計時,大多都是會另開啟專門的子線程來響應(yīng)事件,或者用異步請求來代替來增加用戶的體驗。異步請求會更加精準控制事件。異步請求的優(yōu)點是不會阻塞當前線程,但是相對于同步請求來講會相對比較復(fù)雜一些,至少要在程序中加入回調(diào)的方法來獲取異步事件響應(yīng)的數(shù)據(jù)。下面采用的是異步網(wǎng)絡(luò)請求。</p><p> pu
91、blic class DrugsAsyncTask extends AsyncTask<String, Void, byte[]> {</p><p><b> @Override</b></p><p> protected byte[] doInBackground(String... params) {// 每次的進度處理、可以更新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í)行實際的后臺操作前被UI</p><p> // thread調(diào)用,可以在該方法中做一些準備工作</p><p> super.onPostExecute(result);</p><p>
98、 if (cb != null) {</p><p> cb.onDataReturned(new String(result));// 引用數(shù)據(jù)類型的強制轉(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),就是客戶程序CLIENT調(diào)用服務(wù)程序SERVER中的某個函數(shù)SA,然后SERVER又在某個時候反過來調(diào)用CLIENT中的某個函數(shù)CB,對于CLIENT來說,這個CB便叫做回調(diào)函數(shù)。一般說來,CLIENT不會自己調(diào)用CB,CLIENT提供CB的目的就是讓SERVER來調(diào)用它,而且是CLIENT不得不提供。由于SERVER并不知道CLIENT提供的CB叫甚名誰,所以SERVER會約定CB的接口規(guī)范(函數(shù)原型),然后由CLI
102、ENT提前通過SERVER的一個函數(shù)R告訴SERVER自己將要使用CB函數(shù),這個過程稱為回調(diào)函數(shù)的注冊,R稱為注冊函數(shù)。在異步請求工具類中聲明一個回調(diào)接口,并實例化這個回調(diào)接口,通過post請求方法請求數(shù)據(jù),在要更新的activity中實現(xiàn)回調(diào)接口的方法,獲取異步請求響應(yīng)的數(shù)據(jù),通知activity進行數(shù)據(jù)更新。利用回調(diào)和異步可以實現(xiàn)網(wǎng)絡(luò)請求數(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ù)解析:用戶請求回來的數(shù)據(jù)都是JSON字符串,JSON可以表示數(shù)組以及復(fù)雜的對象,并不僅僅是鍵和值的簡單列表。JSON可以將JavaScript對象中表示的一組數(shù)據(jù)轉(zhuǎn)換為字符串,然后可以在函數(shù)之間簡單的訪問這些字符串,或者可以通
105、過Web客戶機將異步應(yīng)用程序中的字符傳遞給服務(wù)器端程序,用戶只有經(jīng)過解析之后才能夠使用。</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 對癥找藥</b></p><p&
113、gt; ?。?)界面效果如圖4-5,圖4-6,圖4-7:</p><p> 圖4-5對癥找藥一級界面 圖4-6對癥找藥二級界面</p><p> 圖4-7對癥找藥三級界面</p><p> 界面動畫效果的設(shè)計和實現(xiàn):</p><p> 圖4-5,4-6的布局設(shè)計與保健食品的設(shè)計相同,采用布局復(fù)用,圖4-7的布局設(shè)
114、計用到了一個水平線性布局添加了疾病簡介,藥物治理,推薦藥物三個文本信息的TextView組件,設(shè)置文本的比重為1,即平均設(shè)置各個文本水平擺放,并設(shè)置為居中。畫面的動態(tài)滑動效果使用過了ViewPager動畫顯示組件,組件的背景取為#f6f5ec,比重分配為1,設(shè)置每個view顯示的時間長為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ò)請求數(shù)據(jù),解析數(shù)據(jù)等與保健食品功能模塊類似。將請求得到的數(shù)據(jù)在ViewPager動畫效果中展示,
118、ViewPager每個頁卡通過適配器加載布局,設(shè)置默認打開頁卡為0,ViewPager動畫效果的偏移量設(shè)置通過設(shè)置OnPageChangeListener 監(jiān)聽器控制,動畫的移動設(shè)置x和y的偏移量,實現(xiàn)動畫的移動效果。具體代碼如下:</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) {// 此方法是頁面跳轉(zhuǎn)完后得到調(diào)用,arg0是你當前選中的頁面的Position(位置編號)</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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于安卓平臺開發(fā)的移動應(yīng)用——用藥指南
- 基于安卓平臺開發(fā)的移動應(yīng)用——用藥指南論文正文.doc
- 安卓移動應(yīng)用開發(fā)論文
- 基于安卓平臺的手機計步器畢業(yè)論文
- 基于安卓平臺的手機計步器畢業(yè)論文
- 基于安卓的手機游戲開發(fā)畢業(yè)論文
- 基于安卓的移動課堂應(yīng)用開發(fā)
- 基于安卓平臺的手機計步器的設(shè)計-畢業(yè)論文
- 基于安卓的音樂播放器開發(fā)-畢業(yè)論文
- 畢業(yè)論文---基于安卓平臺的校園通軟件設(shè)計
- 安卓應(yīng)用基礎(chǔ)畢業(yè)論文外文翻譯
- 基于安卓平臺的校園通軟件設(shè)計—畢業(yè)論文.doc
- 畢業(yè)論文——基于安卓坦克大戰(zhàn)游戲
- 畢業(yè)論文——基于安卓系統(tǒng)的考勤系統(tǒng)
- 【計算機專業(yè)本科畢業(yè)設(shè)計】基于安卓平臺開發(fā)的移動應(yīng)用--用藥指南【代碼+論文正文+開題報告+任務(wù)書+評閱書+進度計劃+答辯記錄表】
- 畢業(yè)論文范文——基于安卓平臺的手機助手設(shè)計與實現(xiàn)
- 畢業(yè)論文范文——基于安卓平臺的手機助手設(shè)計與實現(xiàn)
- 基于安卓坦克大戰(zhàn)游戲畢業(yè)論文.doc
- 安卓開發(fā)外文翻譯--安卓應(yīng)用基礎(chǔ)
- 安卓手機旅游向?qū)脚_畢業(yè)論文(含外文翻譯)
評論
0/150
提交評論