Android應(yīng)用開發(fā)-“我的日記”的設(shè)計與實現(xiàn)課件_第1頁
Android應(yīng)用開發(fā)-“我的日記”的設(shè)計與實現(xiàn)課件_第2頁
Android應(yīng)用開發(fā)-“我的日記”的設(shè)計與實現(xiàn)課件_第3頁
Android應(yīng)用開發(fā)-“我的日記”的設(shè)計與實現(xiàn)課件_第4頁
Android應(yīng)用開發(fā)-“我的日記”的設(shè)計與實現(xiàn)課件_第5頁
已閱讀5頁,還剩83頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

任務(wù)四

“我的日記”的設(shè)計與實現(xiàn)支撐知識:ProgressBar控件、線程、Activity間的跳轉(zhuǎn)與生命周期、簡單數(shù)據(jù)存儲、文件存儲任務(wù)四

“我的日記”的設(shè)計與實現(xiàn)支撐知識:ProgressB1ProgressBar與線程的結(jié)合Activity之間的跳轉(zhuǎn)Activity的生命周期重難點Android簡單的數(shù)據(jù)存儲文件存儲ProgressBar與線程的結(jié)合Activity之間的跳轉(zhuǎn)2知識目標(biāo)掌握Android的ProgressBar控件的屬性設(shè)定、使用方法;掌握Activity的生命周期、各狀態(tài)的轉(zhuǎn)化關(guān)系與對應(yīng)的回調(diào)函數(shù);掌握Intent的作用、重要屬性、常見方法;理解簡單數(shù)據(jù)存儲SharedPreferences的使用場合、使用方法;掌握文件存儲的常見使用方法。知識目標(biāo)掌握Android的ProgressBar控件的屬性3能力目標(biāo)能夠利用Handler與ProgressBar控件相結(jié)合演示進度;能夠利用Intent的屬性與方法實現(xiàn)Activity的跳轉(zhuǎn);能夠利用SharedPreferences實現(xiàn)簡單的數(shù)據(jù)存儲;能夠?qū)崿F(xiàn)Android中的文件存儲。能力目標(biāo)能夠利用Handler與ProgressBar控件相4項目流程任務(wù)簡介任務(wù)分析支撐知識任務(wù)實施任務(wù)小結(jié)拓展訓(xùn)練項目流程任務(wù)簡介任務(wù)分析支撐知識任務(wù)實施任務(wù)小結(jié)拓展訓(xùn)練5任務(wù)簡介分析知識實施小結(jié)拓展任務(wù)簡介分析知識實施小結(jié)拓展6進行程序演示,請同學(xué)們觀察該應(yīng)用實現(xiàn)了哪些功能?該應(yīng)用需要哪些控件與Android知識點支撐?任務(wù)簡介分析知識實施小結(jié)拓展進行程序演示,請同學(xué)們觀察該應(yīng)用實現(xiàn)了哪些功能?任務(wù)簡介分析7任務(wù)簡介分析知識實施小結(jié)拓展TextViewEditTextCheckBox與SharedPreferencesButtonProgressBar與線程Button與文件存儲Activity進行跳轉(zhuǎn)EditText與文件存儲任務(wù)簡介分析知識實施小結(jié)拓展TextViewEditText8任務(wù)簡介分析知識實施小結(jié)拓展本次任務(wù)涵蓋以下支撐知識點:ProgressBar控件的使用;Activity生命周期與回調(diào)函數(shù);Activity之間的跳轉(zhuǎn);文件存儲;簡單數(shù)據(jù)存儲。任務(wù)簡介分析知識實施小結(jié)拓展本次任務(wù)涵蓋以下支撐知識點:9支撐知識

1.ProgressBar控件支撐知識

1.ProgressBar控件10ProgressBar為進度條控件,通常是在用戶等待程序運行結(jié)果等耗時較長的情況下,作為一個反饋機制,來告知用戶目前的進展程度,避免用戶誤以為程序沒有響應(yīng),從而提高程序的用戶體驗。1.1簡介環(huán)形進度條ProgressBar為進度條控件,通常是在用戶等待程序運行111.2屬性屬性作用示例style設(shè)置ProgressBar進度條的風(fēng)格

style=“@android:style/Widget.ProgressBar.Horizontal”

:水平進度條style=“@android:style/Widget.ProgressBar.Inverse”:進度條為反轉(zhuǎn)樣式的環(huán)形進度條style=“@android:style/Widget.ProgressBar.Large”:進度條為大環(huán)性進度條1.2屬性屬性作用示例style設(shè)置ProgressBar121.2屬性屬性作用示例android:indeterminate開啟進度條的“不確定模式

android:indeterminate=“true”:進度條會顯示不停地在循環(huán)滾動的動畫效果,但是不會顯示實際的進度。android:indeterminateBehavior

決定當(dāng)進度條中的進度達到最大值的時候,此時進度條要顯示的動畫效果

android:indeterminateBehavior

=“repeat

“:進度條中的進度達到最大值之后,將重新從0開始;android:indeterminateBehavior

=“cycle”

:進度條中的進度達到最大值之后,將保持現(xiàn)值,然后逐漸反向回退到0。1.2屬性屬性作用示例android:indetermi131.2屬性屬性作用示例android:indeterminateDrawable

設(shè)置進度條上的Drawable對象android:indeterminateDrawable=“@id/XXX”:XXX為圖片資源名android:indeterminateOnly強制進度條的“不確定模式”android:indeterminateOnly=“true”:強制進度條為“不確定模式”android:progress設(shè)置進度條默認的進度值,取值必須為介于0和最大值之間的整數(shù)

android:progress="0"android:max設(shè)置進度條最大值android:max=“8"1.2屬性屬性作用示例android:indetermin14方法作用示例intgetProgress()獲得當(dāng)前進度條的進度值

intprogress=progressBar.getProgress();voidsetProgress(intprogress)設(shè)定進度條的當(dāng)前進度

progressBar.setProgress(0);voidsetMax(intmax)設(shè)定進度條的范圍

progressBar.setMax(200);1.3方法方法作用示例intgetProgress()獲得當(dāng)前進度15方法作用示例voidsetIndeterminate(booleanindeterminate)設(shè)置進度條是否處于“不確定模式”progressBar.setIndeterminate(true);finalvoidincrementProgressBy(intdiff)設(shè)置進度條的進度增加或是減少,當(dāng)入?yún)檎麛?shù)時,進度增加;當(dāng)入?yún)樨撜麛?shù)時,進度減少。

progressBar.incrementProgressBy(-5);1.3方法方法作用示例voidsetIndeterminate(b16演示如何創(chuàng)建ProgressBar控件;演示如何利用ProgressBar控件的屬性與方法1.4示例演示1.4示例演示17支撐知識

2.線程支撐知識

2.線程18所有界面控件相關(guān)的操作,實際上都是由主UI線程(主用戶界面線程)在負責(zé)運行。但有時候程序會執(zhí)行一些耗時的操作,一般的解決方案是將耗時的操作交給另外一個子線程來執(zhí)行,從而保證主UI線程的順暢。2.1簡介所有界面控件相關(guān)的操作,實際上都是由主UI線程(主用戶界面線192.1簡介子線程Thread:負責(zé)耗時的操作主UI線程:負責(zé)與用戶操作交互Handler發(fā)送消息Handler接收消息,更新UIMessage休眠1秒Handler發(fā)送消息MessageHandler接收消息,更新UI休眠1秒Handler發(fā)送消息MessageHandler接收消息,更新UI2.1簡介子線程Thread:負責(zé)耗時的操作主UI線程:負20方法作用示例Thread.Thread(Runnablerunnable)構(gòu)造方法,用于創(chuàng)建子線程對象。

Threadt=newThread(newRunnable(){ publicvoidrun(){…}}Thread.start()運行線程

thread.start();Thread.sleep(longtime)讓線程休眠thread.sleep(1000);//休眠1秒2.2方法方法作用示例Thread.Thread(Runnabler21方法作用示例booleanHandler.sendMessage(Messagemsg)發(fā)送消息handler.sendMessage(newMessage());voidHandler.handleMessage(Messagemsg)接收處理消息

handler.handleMessage(msg);2.2方法方法作用示例booleanHandler.sendMe22演示如何創(chuàng)建子線程;演示如何將線程與ProgressBar控件相結(jié)合,實現(xiàn)5秒的進度條顯示2.3示例演示2.3示例演示23支撐知識

3.Activity間的跳轉(zhuǎn)支撐知識

3.Activity間的跳轉(zhuǎn)24Intent是兩個Activity之間進行跳轉(zhuǎn)的媒介。Android中,當(dāng)一個Activity需要跳轉(zhuǎn)到另外一個Activity時,就需要用到Intent了。Intent中文為“意圖”,意味著Android程序在進行頁面跳轉(zhuǎn)時,只需告知系統(tǒng)它的“意圖”:需要啟動哪一個Activity。3.1Intent簡介Intent是兩個Activity之間進行跳轉(zhuǎn)的媒介。3.253.2屬性-Action屬性Action常量對應(yīng)的字符串含義說明ACTION_VIEWent.action.VIEW向用戶顯示數(shù)據(jù)ACTION_EDITent.action.EDIT向用戶提供編輯某個數(shù)據(jù)的途徑ACTION_DIALent.action.DIAL向用戶顯示一個電話撥號面板界面ACTION_MAINent.action.MAIN標(biāo)志著該Activity是某個Application應(yīng)用程序的入口點ACTION_ATTACH_DATAent.action.ATTACH_DATA指明附加信息給其他地方的一些數(shù)據(jù)ACTION_CALLent.action.CALL向用戶直接顯示打電話的界面3.2屬性-Action屬性Action常量對應(yīng)的字符串含263.2屬性-Data屬性Data屬性是用來向Action屬性提供可操作的數(shù)據(jù)的采用Uri對象的格式,即scheme://host:port/path。content://contacts/people/1ACTION_VIEWcontent://contacts/people/1:顯示id為1的聯(lián)系人信息;ACTION_DIALcontent://contacts/people/1:將id為1的聯(lián)系人電話號碼顯示在撥號界面中;ACITON_VIEWtel:123:顯示電話為123的聯(lián)系人信息;ACTION_VIEW:在瀏覽器中瀏覽谷歌網(wǎng)站。3.2屬性-Data屬性Data屬性是用來向Action屬273.2屬性-Category屬性Category常量對應(yīng)的字符串含義說明CATEGORY_DEFAULTent.category.DEFAULTAndroid系統(tǒng)中默認的分類CATEGORY_HOMEent.category.HOME設(shè)置該Activity為HomeActivityCATEGORY_PREFERENCEent.category.PREFERENCE設(shè)置該Activity為參數(shù)面板3.2屬性-Category屬性Category常量對應(yīng)的283.2屬性-Category屬性Category常量對應(yīng)的字符串含義說明CATEGORY_LAUNCHERent.category.LAUNCHER設(shè)置該Activity為在當(dāng)前應(yīng)用程序啟動器中優(yōu)先級最高的Activity,通常與ACTION_MAIN配合使用CATEGORY_BROWSABLEent.category.BROWSABLE設(shè)置該Activity能被瀏覽器啟動CATEGORY_DEFAULTent.category.DEFAULTAndroid系統(tǒng)中默認的分類CATEGORY_HOMEent.category.HOME設(shè)置該Activity為HomeActivity3.2屬性-Category屬性Category常量對應(yīng)的293.2屬性-Component屬性指定了Component屬性以后,Intent的其他所有屬性都是可選的。這種方式的優(yōu)點在于無需查找,直接調(diào)用目標(biāo)組件,速度快捷。3.2屬性-Component屬性指定了Component303.2屬性-Extras屬性Bundle對象Bundle類與Map類很相似,它可以放入多對key-value鍵值,這樣在通過Intent對象進行Activity跳轉(zhuǎn)時,就能夠進行數(shù)據(jù)的傳遞了。3.2屬性-Extras屬性Bundle對象313.3方法方法作用示例Intent.setAction(Stringaction)設(shè)置Action屬性Intentintent=newIntent();

intent.setAction(Intent.ACTION_WEB_SEARCH);

Intent.setData(Stringdata)設(shè)置Data屬性intent.setData(Uri.parse(""));Intent.setType(Stringtype)設(shè)置Type屬性intent.setType(vnd.android.cursor.dir/contact);

Intent.putExtras(Bundlebundle)設(shè)置Extra屬性Bundlebundle=newBundle();bundle.putString(“KEY_HEIGHT”,”180”);bundle.putString(“KEY_WEIGHT”,”80”);intent.setExtra(bundle);

3.3方法方法作用示例Intent.setAction(323.3方法方法作用示例Intent.setClass

(Context

packageContext,

Class<?>cls)明確intent跳轉(zhuǎn)時的源Activity和目標(biāo)Activity

Intentintent=newIntent();

intent.setClass(context,targetActivity.class);setClassName(Context

packageContext,

StringclassName)明確intent跳轉(zhuǎn)時的源Activity和目標(biāo)Activity

intent.setClassName(MainActivity.this,"ent.SecondActivity");Context.startActivity(Intentintent)根據(jù)intent啟動某個Activity

Intentintent=newIntent();

intent.setClass(context,targetActivity.class);startActivity(intent);3.3方法方法作用示例Intent.setClass

(33列舉一些常見的Activity跳轉(zhuǎn)案例演示Intent的使用方法3.4示例演示3.4示例演示341.創(chuàng)建一個布局文件2.創(chuàng)建一個類繼承自Activity,并綁定布局文件3.AndroidManifest注冊Activity4.使用Intent跳轉(zhuǎn)到Activity3.5跳轉(zhuǎn)至另外一個Activity的步驟3.5跳轉(zhuǎn)至另外一個Activity的步驟35支撐知識

4.Activity的生命周期支撐知識

4.Activity的生命周期36活動狀態(tài):處于Activity棧的棧頂,用戶啟動應(yīng)用程序或Activity之后,該Activity位于屏幕前臺,用戶可見,能獲得焦點(即用戶可以操作它)。同一時刻只會有一個Activity處于活動狀態(tài);暫停狀態(tài):該Activity位于前臺,但是被另外一個處于“活動”狀態(tài)的Activity(比如對話框風(fēng)格的Activity)遮擋住一部分,沒有焦點,用戶不能直接對其進行輸入操作,但界面依舊可見,該Activity的狀態(tài)處于“暫停”狀態(tài)。停止?fàn)顟B(tài):該Activity被其他Activity完全擋住,不再可見,也失去了焦點;銷毀狀態(tài):該Activity被終止。4.1生命周期活動狀態(tài):處于Activity棧的棧頂,用戶啟動應(yīng)用程序或A374.2

回調(diào)函數(shù)啟動ActivityActivity停止?fàn)顟B(tài)Activity銷毀狀態(tài)Activity暫停狀態(tài)Activity運行狀態(tài)onCreate()onStart()onPause()onResume()onStop()onDestroy()onRestart()另一個Activity來到前臺該Activity重返前臺該Activity不可見該Activity重返前臺4.2回調(diào)函數(shù)啟動ActivityActivity停止?fàn)?8演示回調(diào)函數(shù)的執(zhí)行4.3示例演示4.3示例演示39支撐知識

5.Activity的文件存儲支撐知識

5.Activity的文件存儲40Android手機中的文件(如文本、圖片、音頻視頻)可以存儲在手機內(nèi)存中或是外部存儲器SD卡中,Android中提供了標(biāo)準(zhǔn)的Java文件輸入輸出流(FileOutputStream、FileInputStream)的方式來對文件數(shù)據(jù)進行讀寫。隨著文件存儲位置(內(nèi)存、外部存儲器)的不同,我們獲取Java文件輸入輸出流的方式并不一樣。5.1簡介/data/data/【包名】/files/mnt/sdcard/Android手機中的文件(如文本、圖片、音頻視頻)可以存儲415.1相關(guān)的類FileFileOutputStreamFileInputStreamwrite方法read方法5.1相關(guān)的類FileFileOutputStreamF425.2

重要方法方法作用示例FileOutputStreamopenFileOutput(Stringname,intmode)對于存儲在手機內(nèi)存中的文件,獲得標(biāo)準(zhǔn)的Java文件輸出流

//獲得了某個文件的輸出流,文件數(shù)據(jù)只能被本應(yīng)用程序訪問FileOutputStreamoutputStream=openFileOutput(filename,0);//獲得某文件的輸出流,新的文件數(shù)據(jù)將以追加的方式寫入到該文件中FileOutputStreamoutputStream=openFileOutput(filename,Context.MODE_APPEND

);FileOutputStream構(gòu)造方法根據(jù)File對象獲取其Java文件輸出流

FileOutputStreamoutputStream=newFileOutputStream(file);//參數(shù)為File對象5.2重要方法方法作用示例FileOutputStrea435.2

重要方法方法作用示例FileInputStream構(gòu)造方法openFileInput(Stringname)對于存儲在手機內(nèi)存中的文件,獲得標(biāo)準(zhǔn)的Java文件輸入流

FileInputStreaminputStream=openFileInput(filename);//參數(shù)為文件名FileInputStream構(gòu)造方法根據(jù)File對象獲取其Java文件輸入流

FileInputStreaminputStream=newFileInputStream(file);//參數(shù)為File對象5.2重要方法方法作用示例FileInputStream445.2

重要方法方法作用示例File

(File

dir,

String

name)對于存儲在某個目錄上的文件,我們在獲得Java文件輸入輸出流前,需要調(diào)用該方法來獲得該文件所對應(yīng)的File對象。Filefile=newFile(Environment.getExternalStorageDirectory(),filename);//獲得SD卡目錄中的某個文件對象5.2重要方法方法作用示例File

(File

dir,455.2

重要方法方法作用示例staticFileEnvironment.getExternalStorageDirectory()

獲取手機外部存儲目錄即SD卡對應(yīng)的File對象

//在/mnt/sdcard目錄下創(chuàng)建File對象Filefile=newFile(Environment.getExternalStorageDirectory(),filename);staticStringEnvironment.getExternalStorageState()獲得手機外部存儲器即SD卡的當(dāng)前狀態(tài)

Environment.MEDIA_MOUNTED為SD卡處于加載狀態(tài)5.2重要方法方法作用示例staticFileEnv46演示File文件存儲的使用默認目錄存儲和讀取指定目錄存儲SD卡目錄存儲5.3示例演示5.3示例演示47支撐知識

6.SharedPreferences支撐知識

6.SharedPreferences48為什么需要SharedPreferences?

6.1簡介1.輸入用戶名密碼2.勾選“記住密碼”登錄3.再次登錄時為什么需要SharedPreferences?6.1簡49點擊【登錄】時,需要保存用戶名和密碼6.1簡介寫文件username:adminpassword:12345file.txt讀文件將文件內(nèi)容讀出后,還需要進行字符串的解析,提取出用戶名和密碼的內(nèi)容。點擊【登錄】時,需要保存用戶名和密碼6.1簡介寫文件us50SharedPreferences為我們提供方便的、輕量級的數(shù)據(jù)存儲;通常是用作應(yīng)用程序中的參數(shù)配置或是一些屬性的存儲設(shè)置。例如我們可以通過它來保存用戶上一次保存的信息或所做的修改,下一次應(yīng)用程序啟動后,就會為用戶加載上一次保存的信息,可以減少用戶重復(fù)設(shè)置、輸入等麻煩,方便應(yīng)用。SharedPreferences所存儲的數(shù)據(jù)是以“鍵-值”的格式保存在xml文件中。該xml文件將存在于工程中的/data/data/包名/shared_prefs目錄下。6.1簡介SharedPreferences為我們提供方便的、輕量級的516.2

重要方法方法Context類的方法:SharedPreferencesgetSharedPreferences(String

name,intmode)功能獲得SharedPreferences的xml文件中的內(nèi)容。參數(shù)name為xml文件名;mode為讀寫模式:Context.MODE_PRIVATE:只能被本應(yīng)用程序訪問;Context.MODE_WORLD_READABLE:其他應(yīng)用可讀Context.MODE_WORLD_WRITEABLE:其他應(yīng)用可寫返回值SharedPreferences的對象6.2重要方法方法Context類的方法:功能獲得Sha526.2

重要方法-寫SharedPreferences獲取SharedPreferences對象獲取Editor對象向Editor對象中寫入“鍵-值”提交6.2重要方法-寫SharedPreferences獲取536.2

重要方法方法SharedPreferences類的方法:Editoredit()功能獲得SharedPreferences的編輯器對象。參數(shù)無返回值無示例:SharedPreferencessp=getSharedPreference("userinfo",MODE_PRIVATE);Editoreditor=sp.edit();6.2重要方法方法SharedPreferences類的546.2

重要方法方法Editor類的方法:EditorputXXX(Stringkey,XXXvalue)功能向SharedPreferences中寫入“鍵”所對應(yīng)的“值”參數(shù)key為“鍵”,字符串類型value為“值”,可為Boolean、int、long、float、String等類型返回值Editor編輯器對象示例:editor.putBoolean("REMBERPWD",false);6.2重要方法方法Editor類的方法:功能向Share556.2

重要方法方法Editor類的方法:booleancommit()功能提交Editor編輯器中所修改的內(nèi)容參數(shù)無返回值無示例:mit();6.2重要方法方法Editor類的方法:功能提交Edit566.2

重要方法-讀SharedPreferences獲取SharedPreferences對象根據(jù)“鍵”讀取其“值”6.2重要方法-讀SharedPreferences獲取576.2

重要方法方法SharedPreferences類的方法:XXXgetXXX(String

key,XXXdefValue)功能獲得SharedPreferences中的指定“鍵”所對應(yīng)的“值”參數(shù)key為要獲取的數(shù)據(jù)的“鍵”如果key不存在,則返回默認值defValue返回值如果key存在,就返回對應(yīng)的“值”如果key不存在,則返回默認值defValue示例:SharedPreferencessp=getSharedPreference("userinfo",MODE_PRIVATE);Booleanflag=sp.getBoolean("REMBERPWD",false);6.2重要方法方法SharedPreferences類的586.2

其他方法(寫SharedPreferences)方法作用Editor

remove(Stringkey)在SharedPreferences中刪除“鍵”所對應(yīng)的“值”Editorclear()清空SharedPreferences中所有的“鍵-值”對6.2其他方法(寫SharedPreferences)方59演示如何利用SharedPreferences

保存登錄界面中的密碼6.3實例演示演示如何利用SharedPreferences保存登錄界面60Key類型含義REMBERPWDBooleanTrue為記住密碼,F(xiàn)alse為不需要記住密碼USERNAMEString用戶名PWDString密碼6.3實例演示Key類型含義REMBERPWDBooleanTrue為記住61點擊【登錄】按鈕,判斷是否勾選了【記住密碼】:勾選:設(shè)定REMBERPWD的值為True,并設(shè)定USERNAME和PWD的值未勾選:設(shè)定REMBERPWD的值為False,并清除USERNAME和PWDonCreate方法,讀取REMBERPWD的值,判斷該值:True:讀取USERNAME和PWD,并顯示到EditText中,勾選了【記住密碼】False:啥都不干6.3實例演示點擊【登錄】按鈕,判斷是否勾選了【記住密碼】:6.3實例62任務(wù)簡介分析知識實施小結(jié)拓展我們通過以下的流程來實現(xiàn):總體分析界面布局創(chuàng)建項目創(chuàng)建字符串資源創(chuàng)建控件樣式界面布局功能實現(xiàn)程序運行任務(wù)簡介分析知識實施小結(jié)拓展我們通過以下的流程來實現(xiàn):63任務(wù)實現(xiàn)

1.總體分析任務(wù)實現(xiàn)

1.總體分析641.1登錄界面TextView控件EditText控件CheckBox、SharedPreferencesButton控件一個隱藏的ProgressBar、線程1.1登錄界面TextView控件EditText控件Ch651.2“寫入日記”界面EditText、文件存儲Button、文件存儲1.2“寫入日記”界面EditText、文件存儲Butto661.3流程處理程序啟動,載入“登錄”界面輸入用戶名/密碼單擊“登錄”按鈕從手機內(nèi)存中讀取“MyDiary.txt”文件,將內(nèi)容顯示跳至“寫入日記”界面從SharedPreferences讀取密碼密碼保存至SharedPreferences修改內(nèi)容,單擊“保存”按鈕程序退出記住密碼?記住密碼?N用戶名/密碼正確?單擊【返回】鍵兩次?YYYYNNN1.3流程處理程序啟動,載入“登錄”界面輸入用戶名/密碼單67任務(wù)實現(xiàn)

2.界面布局任務(wù)實現(xiàn)

2.界面布局68演示創(chuàng)建項目:創(chuàng)建一個Android應(yīng)用程序項目,取名為MyDiary;將默認的Activity名稱MainActivity.java重命名為LoginActivity.java,其對應(yīng)的XML布局文件為res\layout\activity_login.xml;新建一個Activity名稱為DiaryActivity.java,其對應(yīng)的XML布局文件為res\layout\activity_diary.xml

。2.1創(chuàng)建項目演示創(chuàng)建項目:2.1創(chuàng)建項目69演示創(chuàng)建字符串資源:在res/values/strings.xml

中添加字符串資源:2.2創(chuàng)建字符串資源

<stringname="hint_username">用戶名</string><stringname="hint_pwd">密碼</string><stringname="remember_pwd">記住密碼</string><stringname="btn_login">登錄</string><stringname="btn_save">保存</string><stringname="view_mydiary">我的日記</string><stringname="hint_mydiary">請在這兒寫下你的心情日記</string>演示創(chuàng)建字符串資源:2.2創(chuàng)建字符串資源<string70演示如何創(chuàng)建<shape>資源2.3創(chuàng)建控件樣式<?xmlversion="1.0"encoding="utf-8"?><shapexmlns:android="/apk/res/android"><!--黑色邊框,寬度為2dp--><strokeandroid:width="2dp"android:color="#000"/><!--背景色為黃金色--><solidandroid:color="#fbe6c9"/></shape>演示如何創(chuàng)建<shape>資源2.3創(chuàng)建控件樣式<?xml712.4登錄界面布局的實現(xiàn)RelativeLayoutactivity_login.xml總體布局采用RelativeLayout相對布局放置各種控件“我的日記”Textview用戶名/密碼EditText記住密碼CheckBox登錄Button進度條ProgressBar2.4登錄界面布局的實現(xiàn)RelativeLayoutact72activity_diary.xml總體布局采用LinearLayout垂直線性布局放置各種控件利用<shape>資源設(shè)置“寫日記”的EditText控件的邊框與背景色2.5“寫入日記”界面布局實現(xiàn)LinearLayout“寫日記”的EditText“保存”按鈕activity_diary.xml總體布局采用Linear73任務(wù)實現(xiàn)

3.功能實現(xiàn)任務(wù)實現(xiàn)

3.功能實現(xiàn)743.1登錄界面功能實現(xiàn)-申明變量在LoginActivity.java類中申明成員變量,包括控件相關(guān)的對象、SharedPreferences對象、處理消息的Handler對象、記錄當(dāng)前進度的progress變量。publicclassLoginActivityextendsActivity{ EditTextusernameEdit;//用戶名輸入框

EditTextpwdEdit;//密碼輸入框 CheckBoxrememberPwdCheck;//記住密碼的復(fù)選框 ButtonloginBtn;//登錄按鈕 ProgressBarprogressBar;//進度條 SharedPreferencespref;//簡單數(shù)據(jù)存儲 Handlerhandler;//線程的手柄 staticfinalintSTOP=0x111;//進度完成的標(biāo)志 staticfinalintCONTINUE=0x112;//繼續(xù)顯示進度條的標(biāo)志 staticfinalintMAX=100;//最大的進度為100% intprogress;//進度條的當(dāng)前進度3.1登錄界面功能實現(xiàn)-申明變量在LoginActivit753.1登錄界面功能實現(xiàn)-完成程序總體框架在LoginActivity.java中重寫onCreate()方法protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState); setContentView(R.layout.activity_login);

init();//初始化工作

setListeners();//事件監(jiān)聽}voidinit(){

/*初始化控件變量*/

initViews();

/*初始化線程的手柄*/

initHandler();}3.1登錄界面功能實現(xiàn)-完成程序總體框架在LoginAct763.1登錄界面功能實現(xiàn)-實現(xiàn)initViews()方法voidinitViews(){ usernameEdit=(EditText)findViewById(R.id.edit_username);

… pref=getSharedPreferences("userinfo",Context.MODE_PRIVATE); usernameEdit.setText(pref.getString("USERNAME","")); if(pref.getBoolean("REMBERPWD",false)){ pwdEdit.setText(pref.getString("PWD",""));

}else{

pwdEdit.setText(""); } rememberPwdCheck.setChecked(pref.getBoolean("REMBERPWD",false)); progress=0; progressBar.setProgress(progress); progressBar.setMax(MAX);}3.1登錄界面功能實現(xiàn)-實現(xiàn)initViews()方法vo773.1登錄界面功能實現(xiàn)-實現(xiàn)initHandler()handler=newHandler(){

publicvoidhandleMessage(Messagemsg){

switch(msg.what){

caseCONTINUE://進度未完成

if(!Thread.currentThread().isInterrupted()){//當(dāng)前線程正在運行

progressBar.setProgress(progress);

}

break; caseSTOP://進度已完成

Intentintent=newIntent();

intent.setClass(LoginActivity.this,DiaryActivity.class);

startActivity(intent);

finish();//結(jié)束該Activity

break;

}}};}3.1登錄界面功能實現(xiàn)-實現(xiàn)initHandler()ha783.1登錄界面功能實現(xiàn)-實現(xiàn)setListeners()

Stringusername=usernameEdit.getText().toString();

Stringpwd=pwdEdit.getText().toString();

if((!username.equals("admin"))||(!pwd.equals("admin"))){

Toast.makeText(LoginActivity.this,"用戶名或密碼不正確",Toast.LENGTH_LONG).show();

}else{

/*用戶名與密碼都正確的情況處理*/

Editoreditor=pref.edit();

if(rememberPwdCheck.isChecked()){

editor.putString("USERNAME",username);

editor.putString("PWD",pwd);

editor.putBoolean("REMBERPWD",true);

mit();

}else{

editor.putBoolean("REMBERPWD",false);

}

usernameEdit.setEnabled(false);

pwdEdit.setEnabled(false);

loginBtn.setEnabled(false);

}

處理“記住密碼”的SharePreference3.1登錄界面功能實現(xiàn)-實現(xiàn)setListeners() 793.1登錄界面功能實現(xiàn)-實現(xiàn)setListeners()progressBar.setVisibility(View.VISIBLE);newThread(newRunnable(){

publicvoidrun(){

for(inti=0;i<5;i++){ progress=(i+1)*20; Thread.sleep(1000); if(i==4){

Messagemsg=newMessage(); msg.what=STOP; handler.sendMessage(msg); break; }else{

Messagemsg=newMessage(); msg.what=CONTINUE; handler.sendMessage(msg); }

}}).start();

顯示5s的進度條/*循環(huán)5次,每次睡眠1s*/3.1登錄界面功能實現(xiàn)-實現(xiàn)setListeners()p803.2“寫入日記”界面與功能實現(xiàn)-變量申明在DiaryActivity類中申明成員變量,包括控件相關(guān)的對象、用于文件操作的輸入輸出流對象、實現(xiàn)兩次按“返回鍵”退出應(yīng)用程序相關(guān)的變量:EditTextmydiaryEditText;//"寫入日記"的文本輸入框ButtonsaveButton;//"保存"按鈕staticfinalStringFILENAM

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論