安卓日歷管理系統(tǒng)_第1頁
安卓日歷管理系統(tǒng)_第2頁
安卓日歷管理系統(tǒng)_第3頁
安卓日歷管理系統(tǒng)_第4頁
安卓日歷管理系統(tǒng)_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 目 錄目 錄1安卓日歷管理系統(tǒng)2摘 要2Abstract3第一章 系統(tǒng)需求分析31.1 系統(tǒng)的需求分析3第二章 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)42.1 系統(tǒng)主界面的設(shè)計(jì)和實(shí)現(xiàn)42.1.1 系統(tǒng)的功能模塊說明42.1.2 系統(tǒng)的功能模塊結(jié)構(gòu)圖42.1.3 系統(tǒng)主界面的頭部菜單欄62.1.4 系統(tǒng)的日歷界面82.1.5 系統(tǒng)的日歷特色顯示102.2 系統(tǒng)任務(wù)界面的設(shè)計(jì)112.2.1 任務(wù)界面的數(shù)據(jù)庫準(zhǔn)備122.2.2 任務(wù)界面之新增界面152.2.3 任務(wù)界面之總?cè)粘探缑?42.2.3 任務(wù)界面之單一日程界面262.2.4 任務(wù)界面之實(shí)現(xiàn)對已有日程日期的標(biāo)記272.3 系統(tǒng)設(shè)置界面282.4 系統(tǒng)關(guān)于界面292

2、.5 系統(tǒng)底部菜單項(xiàng)292.5.1 日歷界面使用的底部菜單項(xiàng)302.5.2 其他界面使用的底部菜單項(xiàng)設(shè)計(jì)與實(shí)現(xiàn)322.6 農(nóng)歷算法34第三章 程序測試393.1測試用例393.2功能性測試393.3測試過程記錄403.4測試結(jié)果42結(jié)束語43參考文獻(xiàn)44安卓日歷管理系統(tǒng)摘 要隨著生活節(jié)奏的逐步加快,人們常會有許多的重要工作需要去安排或完成,個(gè)人的日常工作、領(lǐng)導(dǎo)的重要會議、個(gè)人重要日期或者時(shí)間等。這些工作都需要在特定的時(shí)間給予醒目標(biāo)識或者提示。而為了能盡可能的減少人們的負(fù)擔(dān),來更有效率的工作和更舒適的生活。這就需要有專門的日程管理系統(tǒng)來安排這些事務(wù)。日程管理系統(tǒng)的主要功能是完成個(gè)人一般日程和重要

3、日程安排并提供提醒和查看的功能。本系統(tǒng)是一個(gè)基于安卓手機(jī)平臺的日程管理系統(tǒng),具有基本的日程活動的增、刪、改、查功能,在日歷瀏覽中可突出顯示有安排的日期。用戶可根據(jù)不同的活動設(shè)置任務(wù),便于對日程的管理。系統(tǒng)還具備提醒程序,可幫助管理重要活動,并且實(shí)現(xiàn)與網(wǎng)絡(luò)數(shù)據(jù)同步的功能。系統(tǒng)是基于安卓的基礎(chǔ)知識和Java語言,以及SQLite提供的數(shù)據(jù)的管理來開發(fā)的,最終取得了較圓滿的成果。關(guān)鍵詞:日歷管理 Java 安卓AbstractAs the pace of life has been accelerating gradually, people often have many of the impor

4、tant work need to arrange or complete, personal daily work, leadership of the important meeting, personal important date or time, etc. All this work need to be in particular time to give marked logo or hints. And in order to reduce the burden of the people as much as possible, to more efficient work

5、 and more comfortable life. This has to be special schedule management system to arrange these affairs. Schedule management system's main function is to make the personal general schedule and important schedules and provide remind and view function.This system is a result of the mobile platform

6、based on schedule management system, have the basic agenda of activity increase and delete, change, check function, in the calendar can browse highlight is the date of the arrangement. Users can set according to different activities task, and is convenient for the management of the schedule. The sys

7、tem also has the remind program can help manage the important activities, and realize and network data synchronization function.System is based on the foundation of andros knowledge and Java language, and to provide the data management SQLite to development, and finally achieved satisfactory results

8、.Key words: Schedule management; Java;Android第一章 系統(tǒng)需求分析1.1 系統(tǒng)的需求分析該系統(tǒng)是一個(gè)基于安卓平臺的手機(jī)日程管理軟件。它是為本軟件的持有者提供日程管理方面服務(wù)的,它包括日歷的查看、日歷上日期對應(yīng)日程的查看、總?cè)粘痰牟榭础⑷粘痰脑黾?、日程的刪除、日程的修改、對本軟件的設(shè)置以及軟件相關(guān)信息的查看等。本軟件有助于人們記住重要的日程并給予提醒,也有助于人們更好的調(diào)節(jié)自己的時(shí)間來減輕生活上的一些負(fù)擔(dān),更輕松及有效的過好每一天。系統(tǒng)是基于安卓的基礎(chǔ)知識和Java語言,以及SQLite提供的數(shù)據(jù)的管理來開發(fā)的,最終取得了較圓滿的成果。第二章 系統(tǒng)設(shè)計(jì)

9、與實(shí)現(xiàn)2.1 系統(tǒng)主界面的設(shè)計(jì)和實(shí)現(xiàn)2.1.1 系統(tǒng)的功能模塊說明(1)日歷查看模塊:擁有一個(gè)完整的日歷界面,包括頭部的年月日、生肖、閏年的顯示,還有每個(gè)日期上都分別有陽歷和陰歷的日期顯示,并且日歷中包含了各個(gè)重要的節(jié)日或紀(jì)念日等。在日歷界面上每個(gè)日期都會跳到當(dāng)前日期的日程添加界面或者是日程顯示界面。日歷界面上還有對存在日程的標(biāo)記,有利于人們更好的管理日程。(2)日程管理模塊:在本模塊中包括總的日程顯示頁面和日歷頁面所跳轉(zhuǎn)到的日程顯示界面或者是日程添加界面???cè)粘田@示界面每一個(gè)日程都會有它所包含的日期、時(shí)間、日程類型、重復(fù)類型和日程內(nèi)容。日歷日期所對應(yīng)的日程顯示界面也是相應(yīng)的顯示。而在日程添加

10、界面中包含了顯示界面所對應(yīng)的各項(xiàng)數(shù)據(jù)、添加日程成功后會有對應(yīng)日歷日期的標(biāo)記。另外也有對日程的一系列管理操作的功能。(3)設(shè)置界面模塊:在設(shè)置中包括了對日程的類型和重復(fù)類型的默認(rèn)設(shè)置。(4)關(guān)于界面模塊:關(guān)于界面中包含了本軟件的設(shè)計(jì)信息及一些基本信息。2.1.2 系統(tǒng)的功能模塊結(jié)構(gòu)圖在程序設(shè)計(jì)分析的基礎(chǔ)上,結(jié)合實(shí)際情況,得出本程序的功能模塊結(jié)構(gòu)圖。在結(jié)構(gòu)圖中包括了功能模塊的表示及其中部分功能的實(shí)現(xiàn)原理。首先是一個(gè)總的功能模塊的結(jié)構(gòu)圖,其中包括了系統(tǒng)設(shè)計(jì)時(shí)的總體功能概括,如圖2.12-1。日程管理系統(tǒng)主界面日歷模塊任務(wù)模塊設(shè)置模塊關(guān)于模塊日歷顯示總?cè)粘田@示類型設(shè)置關(guān)于界面單一日程顯示圖2.12-1

11、 總系統(tǒng)功能模塊然后在總體的功能模塊后面是主體功能的詳細(xì)模塊顯示。在日歷界面顯示上可分為幾個(gè)部分,詳細(xì)見圖2.12-2,日歷模塊日歷模塊日歷模塊日歷顯示陰歷顯示節(jié)假日顯示日期顯示圖2.12-2 日歷顯示模塊 還有就是日程的功能模塊的詳細(xì)介紹??傮w書寫了日程添加界面的功能點(diǎn),結(jié)構(gòu)圖如圖2.12-3所示,新建日程顯示重復(fù)類型選擇日程時(shí)間書寫日程類型選擇日程內(nèi)容書寫圖2.12-3 日程界面模塊2.1.3 系統(tǒng)主界面的頭部菜單欄制作這個(gè)頭部菜單欄是為了提升軟件的可操作性,我用的是TabHost+RadioGroup相結(jié)合的方法來制作這個(gè)部分的。菜單欄的底部位置是通過TabHost這個(gè)布局來實(shí)現(xiàn)的,然后

12、是LinearLayout的線性布局來布置內(nèi)容。內(nèi)部的選項(xiàng)卡是通過TabWiget來實(shí)現(xiàn)首先建立好Android工程(我的工程名為:ScheduleManager),在工程下的res/layout下建立一個(gè)名為main的空xml文件,然后在這個(gè)文件里按照思路來添加布局代碼。主界面的菜單選項(xiàng)使用RadioGroup來建立,在這里的布局中RadioGroup里容納4個(gè)RadioButton,而RadioButton是單選按鈕。在這種情況下就只有也只能有一個(gè)RadioButton能被選擇,并且在開始時(shí)默認(rèn)了第一個(gè)按鈕被選中。其中RadioButton的實(shí)現(xiàn)方式是在設(shè)置了內(nèi)部的文字,然后再按鈕的頂部上

13、添加上圖片,實(shí)現(xiàn)的代碼如下:<RadioButton android:text="string/main_date" android:drawableTop="drawable/tab_date" android:id="+id/radio_button0" android:checked="true" style="style/main_tab_bottom"/>從上述代碼可以看到,在菜單的每個(gè)選項(xiàng)卡樣式都是調(diào)用了style上的main_tab_bottom來實(shí)現(xiàn)樣式的,而main

14、_tab_bottom的背景background的值是drawable/btn_bg ,btn_bg不是一個(gè)簡單的背景圖片,而是一個(gè)xml文件,通過這個(gè)文件可以實(shí)現(xiàn)菜單選項(xiàng)卡切換時(shí)的背景切換的效果,使得這個(gè)菜單欄更加的美觀,代碼是使用了安卓的selector來實(shí)現(xiàn),在這里是通過不停的條件來判斷使用哪一個(gè)item的,里面包括了幾個(gè)屬性值,如是否獲得焦點(diǎn)、是否響應(yīng)事件、是否點(diǎn)擊三個(gè)條件。實(shí)施的代碼如下:<selector xmlns:android=" <item android:state_focused="true" android:state_ena

15、bled="true" android:state_pressed="false" android:drawable="drawable/btn_bg_s" /> <item android:state_enabled="true" android:state_pressed="true" android:drawable="drawable/btn_bg_s" /> <item android:state_enabled="true&quo

16、t; android:state_checked="true" android:drawable="drawable/btn_bg_d" /></selector>制定完主頁面布局后,在下的MainPage文件中OnCreate(OnCreate方法是用來初始化Activity實(shí)例對象的)中調(diào)用布局,到現(xiàn)在為止頂部菜單欄的布局已經(jīng)基本完成,但現(xiàn)在里面所對應(yīng)的內(nèi)容還是空的。所以就需要在這里給tabHost中添加tab內(nèi)容,以第一格的tab為例,先是通過Intent的方式新建個(gè)mDate,用來實(shí)現(xiàn)頁面的跳轉(zhuǎn)的方法,然后動態(tài)用tabHost來

17、通過addTab的方法添加對應(yīng)TabSpec的值和各個(gè)屬性。最后在添加RadioGroup的選擇操作函數(shù),這里是通過switch來完成對應(yīng)按鈕的功能的實(shí)現(xiàn),在每個(gè)case項(xiàng)中通過tabHost.setCurrentTabByTag來給與特定的值實(shí)現(xiàn)頁面上的跳轉(zhuǎn)。最終的效果如圖2.13-1:圖2.13-1 頭部菜單欄效果圖2.1.4 系統(tǒng)的日歷界面系統(tǒng)主界面默認(rèn)選擇日歷界面在頭部菜單欄下方。1.首先是建立一個(gè)布局文件,上面一部分是顯示年月日、生肖和農(nóng)歷的干支紀(jì)年。使用的是一個(gè)TextView類,對應(yīng)的在日歷的CalendarActivity文件中加入函數(shù)來添加頭部的年份等信息。首先需要寫了一個(gè)C

18、alendarView類,這是為日歷顯示所寫的一個(gè)類,在其中使用重載的方法定義了幾個(gè)不同參數(shù)的CalendarView,用于不同的情況。在CalendarActivity中實(shí)例化CalendarView并且使用CalendarView中的一個(gè)方法CalendarView(this, getResources(),jumpMonth,jumpYear,year_c,month_c,day_c);然后書寫方法來添加頭部的年份 閏哪月等信息。首先是對這個(gè)頁面的頭部進(jìn)行布局,通過動態(tài)化的方法來完成。然后建立一個(gè)可以進(jìn)行改變值的StringBuffer類型的參數(shù)textDate。對這個(gè)參數(shù)進(jìn)行appen

19、d操作,添加例如年月日的知道參數(shù)里。其中有一個(gè)閏年判斷的條件函數(shù),是通過calV.getLeapMonth()的值驚醒判斷的。完成后對界面使用setText方法來賦值到界面上。最后是對界面的一些美化,同樣使用動態(tài)布局模式進(jìn)行。2.下面是日歷界面中主體日期部分顯示的完成在CalendarActivity文件初始化實(shí)例對象時(shí)加入動態(tài)添加布局文件的方法。我將此方法命名為addGridView。在這個(gè)方法中同樣是先進(jìn)行動態(tài)化布局,由于這里用的是GridView,這個(gè)GridView應(yīng)用于將一系列的空間組織成二維網(wǎng)格的形式顯示出來,所以適用于我在這里進(jìn)行的日期界面的建立。同樣的首先是動態(tài)化布局的建立,這

20、可以實(shí)例化GridView為gridView參數(shù)進(jìn)行的。在這里需要添加GridView控件的列為7,列寬為46。并且還加上判斷屏幕大小的條件,這需要加入取得屏幕大小的對應(yīng)函數(shù),這里如果是800*480屏幕的話,就將列寬設(shè)置為69。然后進(jìn)行設(shè)置水平和豎直的間距、取值邊框、設(shè)置居中等操作。在這個(gè)方法里面還需加入個(gè)OnTouch方法,用來將gridView中的觸摸事件回傳給gestureDetector,進(jìn)行下面的觸摸操作,即: /將gridview中的觸摸事件回傳給gestureDetectorOverridepublic boolean onTouch(View v, MotionEvent e

21、vent) return CalendarActivity.this.gestureDetector.onTouchEvent(event););創(chuàng)建完日歷的布局后,是在里面添加上具體的日期。就當(dāng)前顯示的頁面來說,是建立幾個(gè)對應(yīng)的參數(shù),用來顯示或傳接數(shù)據(jù)。例如在函數(shù)開始時(shí)就String dayNumber = new String49; 這是作為對GridView控件內(nèi)進(jìn)行標(biāo)記序列的,用于下面條件語句的判斷等,還有就是界面內(nèi)的一些控件名的實(shí)例化。 然后是動態(tài)化的對頁面進(jìn)行屬性值的設(shè)置。其中在對日期中的第一行,即周一等值的這行,設(shè)置字的顏色及背景圖。得出這行的位置就需要通過對參數(shù)position

22、(對應(yīng)編號)進(jìn)行判斷是否在7以內(nèi)。 下一步是當(dāng)前月信息的顯示,這也需要條件函數(shù)來判斷是否為當(dāng)前月,也是來判斷參數(shù)position是否在范圍內(nèi)。在這個(gè)月中還需對當(dāng)天來一個(gè)特殊化,即設(shè)置當(dāng)天日期的背景為圖片current_day_bgc,字色為白。 在這些操作外,還需要得到一些數(shù)值來用于日期數(shù)據(jù)的插入,在這里建立了個(gè)getCalendar方法,如判斷是否為閏年的函數(shù)返回值isLeapyear,某月的總天數(shù),某月的第一天是星期幾,上個(gè)月總天數(shù)。在這方法中再執(zhí)行方法getweek,用來得出以后需要標(biāo)記的日期,這個(gè)在后面來介紹。通過上述的步驟基本完成了日歷界面中的初步建設(shè)。3.由于日歷菜單需要能通過手勢

23、觸摸來進(jìn)行翻頁,所以要在總體布局下建立一個(gè)ViewFlipper類,這個(gè)類是用來實(shí)現(xiàn)屏幕的切換效果的。先是在布局中建立這個(gè)類,然后實(shí)例化手勢gestureDetector并取得布局中ViewFlipper用于下面的調(diào)用。然后是書寫書寫手勢的各個(gè)方法,最主要的是onFling的方法,在這里實(shí)現(xiàn)了頁面的向左及向右滑動的操作,這個(gè)操作是由條件語句來實(shí)現(xiàn)的,由滑動兩點(diǎn)的x坐標(biāo)的值進(jìn)行差值計(jì)算,如果是起點(diǎn)減去重點(diǎn)大于120時(shí)著向左滑動,反之則向右滑動。在滑動操作開始,并且已切換一面后就需要載入新的一張日歷頁面,這里又會用到參數(shù)calV,當(dāng)向左滑動時(shí)則將參數(shù)calV所代表的函數(shù)CalendarView里的

24、jumpMonth加1,代表下一個(gè)月;當(dāng)向右滑動時(shí)則將參數(shù)calV所代表的函數(shù)CalendarView里的jumpMonth減1,代表上一個(gè)月。為了完整性剩余的手勢函數(shù)只是寫了方法未使用。2.1.5 系統(tǒng)的日歷特色顯示在日歷的顯示中除了一些基本的日期顯示,在日期頁面頭部有每年相應(yīng)的生肖和閏年顯示,在日期上有每日的陰歷以及節(jié)假日的顯示。這里有兩個(gè)方法,分別是LunarCalendar 和SpecialCalendar。在LunarCalendar里面包括干支紀(jì)年,陰歷,生肖,節(jié)假日等信息。例如生肖則是建立一個(gè)字節(jié)數(shù)組來記錄十二生肖,并且用函數(shù)來傳回參數(shù)對應(yīng)的生肖。final public Str

25、ing animalsYear(int year) final String Animals = new String "鼠", "牛", "虎", "兔", "龍", "蛇","馬", "羊", "猴", "雞", "狗", "豬" ;return Animals(year - 4) % 12;同樣的其他信息,如節(jié)假日的名稱,也是通過字節(jié)數(shù)組來儲存的。在S

26、pecialCalendar是閏年的判斷函數(shù),每月天數(shù),以及對每月的第一天星期的判斷。閏年通過傳回年值通過函數(shù)進(jìn)行判斷,并傳回布爾值。每月的天數(shù)用switch進(jìn)行判斷賦值給月份天數(shù)的參數(shù)。 對每月的第一天為星期幾的判斷并指定。/指定某年中的某月的第一天是星期幾public int getWeekdayOfMonth(int year, int month)Calendar cal = Calendar.getInstance();cal.set(year, month-1, 1);dayOfWeek = cal.get(Calendar.DAY_OF_WEEK)-1;return dayOfW

27、eek;最終的效果如圖2.15-1:圖2.15-1 日歷界面的最終實(shí)現(xiàn)圖2.2 系統(tǒng)任務(wù)界面的設(shè)計(jì)任務(wù)界面包括任務(wù)主界面(所有日程的顯示)和對應(yīng)日期任務(wù)的顯示,任務(wù)的添加等。在任務(wù)界面涉及到日程的數(shù)據(jù)存儲,所以先介紹下關(guān)于日程的數(shù)據(jù)存儲以及有日程的日期存儲(為日歷界面的標(biāo)記服務(wù))。2.2.1 任務(wù)界面的數(shù)據(jù)庫準(zhǔn)備(1)數(shù)據(jù)庫里表的建立分別建立了schedule表(日程的表)和scheduletagdate(標(biāo)記日期所需的表)Android 提供了標(biāo)準(zhǔn)的數(shù)據(jù)庫創(chuàng)建方式。建立DBOpenHelper類繼承到SQLiteOpenHelper ,實(shí)現(xiàn)onCreate 和 onUpgrade 兩個(gè)方法。

28、OnCreate方法是用于初次使用軟件時(shí)生成數(shù)據(jù)庫,onUpgrade方法是用于升級軟件時(shí)更新數(shù)據(jù)庫表結(jié)構(gòu)。首先是schedule表的建立,在這個(gè)表中包括日程ID、日程類型的ID、日程重復(fù)類型的ID、日程正文內(nèi)容、日程日程時(shí)間這幾個(gè)參數(shù)。建立時(shí)對應(yīng)需要寫上參數(shù)名、參數(shù)類型、主鍵等。db.execSQL("CREATE TABLE IF NOT EXISTS schedule(scheduleID integer primary key autoincrement,scheduleTypeID integer,remindID integer,scheduleContent text,

29、scheduleDate text)"); 下面是scheduletagdate表的建立,在這個(gè)表中包括標(biāo)記的ID、年信息、月信息、日信息、日程ID這幾個(gè)參數(shù)。db.execSQL("CREATE TABLE IF NOT EXISTS scheduletagdate(tagID integer primary key autoincrement,year integer,month integer,day integer,scheduleID integer)"); 建立完表后是繼續(xù)寫入onUpgrade方法,這個(gè)方法會在數(shù)據(jù)庫升級時(shí)被觸發(fā),以便于軟件升級時(shí)更新

30、表結(jié)構(gòu)。public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) db.execSQL("DROP TABLE IF EXISTS schedule");db.execSQL("DROP TABLE IF EXISTS scheduletagdate");onCreate(db);(2)再分別建立ScheduleVO 和ScheduleDateTag ,里面分別寫了表里面各個(gè)數(shù)據(jù)的get(表示獲取某個(gè)變量值)和set(表示設(shè)置某個(gè)變量值)方法,以便于調(diào)用。(3)建立S

31、cheduleDAO文件,這個(gè)文件是用來寫數(shù)據(jù)庫的查找、刪除等方法。 首先是需要實(shí)例化DBOpenHelper用于數(shù)據(jù)庫數(shù)據(jù)的get與set。private DBOpenHelper dbOpenHelper = null;public ScheduleDAO(Context context)dbOpenHelper = new DBOpenHelper(context, "schedules.db");下面就是對表中數(shù)據(jù)的操作了,包括了保存日程信息、查詢某一條日程信息、查詢所有的信息、刪除日程、將日程標(biāo)記的日期保存到數(shù)據(jù)庫中。(1)保存日程信息,先是從日程添加頁面里獲取日

32、程類型的ID、日程重復(fù)類型的ID、日程正文內(nèi)容、日程日程時(shí)間這幾個(gè)參數(shù),然后是使用ContentValues類(這個(gè)類是一個(gè)鍵值對,是用來存儲名值對,它的名一般是String類型,而值都是基本類型)來new一個(gè)參數(shù),用這個(gè)參數(shù)的put方法將這些個(gè)參數(shù)放入到數(shù)據(jù)庫中。values.put("scheduleTypeID", scheduleVO.getScheduleTypeID();/放入日程類型IDvalues.put("remindID", scheduleVO.getRemindID(); /放入重復(fù)類型ID values.put("sc

33、heduleContent", scheduleVO.getScheduleContent();/放入日程正文內(nèi)容 values.put("scheduleDate", scheduleVO.getScheduleDate();/放入日程日期信息最后調(diào)用添加方法insert。 db.insert("schedule", null, values);/插入信息另外需要moveToFirst方法來判斷是否為空,進(jìn)行相關(guān)的操作。(2)查詢某一條日程信息,由于我這里的設(shè)計(jì)是通過對日程的點(diǎn)擊來查看當(dāng)前點(diǎn)擊日期的詳細(xì)信息,即是根據(jù)日程的ID來查看的。and

34、roid sqlite的查詢方法是query方法,它的查詢語句是:db.query("schedule", new String"scheduleID","scheduleTypeID","remindID","scheduleContent","scheduleDate", "scheduleID=?", new StringString.valueOf(scheduleID), null, null, null);另外還需要的是判斷語句,先用curso

35、r.moveToFirst()判斷curor是否為空值,不為空則就給cursor賦值,空著直接cursor.close()來關(guān)閉。(3)查詢所有的日程信息,由于所有日期可能不止一個(gè),所以返回值設(shè)為數(shù)組形式。查詢依舊是用query方法,這里的的where語句相關(guān)的就直接設(shè)為null值。其他的依舊與查詢一條語句相仿。(4)刪除日程,這里的刪除日程需要將日程及對應(yīng)日期上的標(biāo)記一起刪除,這樣才可以便于管理,刪除使用的語句是delete。db.delete("schedule", "scheduleID=?", new StringString.valueOf(s

36、cheduleID);/刪除日程信息db.delete("scheduletagdate", "scheduleID=?", new StringString.valueOf(scheduleID);/刪除日程對應(yīng)的日期標(biāo)識信息(5)將日程標(biāo)志日期保存到數(shù)據(jù)庫中,這里是為了將在日期上標(biāo)識的信息存儲到數(shù)據(jù)庫中,方法同第一步的保存相仿,只是數(shù)據(jù)的不一樣,而且使用的是數(shù)組形式。for(int i = 0; i < dateTagList.size(); i+)/以for循環(huán)的方式進(jìn)行dateTag = dateTagList.get(i);Content

37、Values values = new ContentValues();values.put("year", dateTag.getYear();/放入年信息values.put("month", dateTag.getMonth();/放入月信息values.put("day", dateTag.getDay();/放入日信息values.put("scheduleID", dateTag.getScheduleID();/翻入日程的IDdb.insert("scheduletagdate",

38、 null, values);/插入到表scheduletagdate中(6)只查詢出當(dāng)前日程的日期,這個(gè)查詢語句是通過當(dāng)前月的年和月信息來得到日程標(biāo)記上的所有信息。這里也是使用query語句進(jìn)行查詢的,只不過改變了里面的查詢使用的參數(shù)。所以方法類同于上面所有日程的查詢。 (7)當(dāng)點(diǎn)擊每一個(gè)gridview中item時(shí),查詢出此日期上所有的日程標(biāo)記(scheduleID),通過點(diǎn)擊后得到對應(yīng)日期的年月日信息,然后用query方法得到次日程標(biāo)記的ID,用于后面得到想到相關(guān)的日程信息。query("scheduletagdate", new String"schedu

39、leID", "year=? and month=? and day=?", newStringString.valueOf(year),String.valueOf(month),String.valueOf(day), null, null, null);(8)關(guān)閉數(shù)據(jù)庫。判斷后直接關(guān)閉當(dāng)前數(shù)據(jù)庫。if(dbOpenHelper != null)dbOpenHelper.close();2.2.2 任務(wù)界面之新增界面新增界面是通過對日歷界面上單一日期的點(diǎn)擊來實(shí)現(xiàn)跳轉(zhuǎn)的。(1)首先為了界面的美觀我建了幾個(gè)帶邊框的類,這些類是在原有的textview等基本類的基礎(chǔ)

40、上進(jìn)行美化后形成的。這里一共做了下面的三個(gè)實(shí)現(xiàn)了畫筆效果的類。首先是帶下邊框的TextView,這里TextView類的基礎(chǔ)上用畫筆實(shí)現(xiàn)了下邊框的效果。Paint paint = new Paint();/ 實(shí)例化一支畫筆paint.setColor(android.graphics.Color.BLACK); / 設(shè)置所繪制的邊框顏色為黑色canvas.drawLine(0, this.getHeight() - 1, this.getWidth() - 1, this.getHeight() - 1, paint); / 繪制下邊框帶邊框的EditText,這原本是一個(gè)基本的EditTex

41、t,文本編輯框的類,在這里加上了特殊的樣式、顏色及邊框的圓弧效果。Paint paint = new Paint();/ 實(shí)例化一支畫筆paint.setStrokeWidth(1);/設(shè)置空心現(xiàn)款paint.setStyle(Style.STROKE);/設(shè)置樣式paint.setColor(android.graphics.Color.GRAY);/設(shè)置顏色paint.setAntiAlias(true);/抗鋸齒方法RectF rectF = new RectF(2,0,this.getWidth()-2,this.getHeight()-2);/現(xiàn)在設(shè)置相關(guān)的參數(shù)用于下面的操作。can

42、vas.drawRoundRect(rectF, 8, 8, paint);/畫上圓弧最后一個(gè)是帶邊框的TextView,這個(gè)與上述的EditText相類似,完成這個(gè)列。完成這些邊框類之后就是使用它們,這個(gè)與以前的基本類相似,只是將布局中原來的基本類名類,如TextView,改為對應(yīng)路徑的名稱為。(BorderTextView是新建的TextView類的文件名。) (2)新增日程界面的布局,建立一個(gè)名為schedule的空布局文件。這里的使用的是相對布局RelativeLayout。這樣可以更清晰將各個(gè)框框組合在一起,使得更加美觀。在這個(gè)界面中,總體的以RelativeLayout這個(gè)相對布局

43、名為總體的布局類,最上面是標(biāo)題欄,這就是一個(gè)上述建立的一個(gè)帶邊框的TextView類。<com.pwp.borderText.BorderTextView android:id="+id/scheduleTop"/id號 android:gravity="center"/位置居中 android:layout_width="fill_parent" android:layout_height="40dp"/這兩個(gè)分別為寬和高 android:background="drawable/top_day&

44、quot;/背景圖片的位置 android:textStyle="bold"/文本的樣式加粗 android:clickable="true"/可點(diǎn)擊的選項(xiàng) android:textColor="#000000"/文本顏色設(shè)為黑色 android:text="編輯日程"/文本框上的文字 />下面分別為日程類型及重復(fù)類型這兩個(gè)類型的選擇的點(diǎn)擊框。由于使用的相對布局,那么就需要自己設(shè)置這兩個(gè)點(diǎn)擊框的位置。這里先建立了日程類型的文本框,以layout_below來將這個(gè)文本框放在標(biāo)題框(用id來定位標(biāo)題框)下面,下

45、面幾個(gè)需要特殊設(shè)定的參數(shù): android:layout_below="id/scheduleTop"/文本框的位置設(shè)置 android:layout_width="160dp"/文本框的寬 android:layout_height="40dp"/文本框的高 android:drawableRight="drawable/schedule_type"/在這個(gè)文本框右邊添加一個(gè)圖標(biāo)然后是添加日程重復(fù)方式的文本框,這需要放在日程類型文本框的右邊,這是利用layout_ toRightOf來實(shí)現(xiàn),相應(yīng)的也要設(shè)置位于標(biāo)題

46、框下方,其他的與上面的相類似。 android:layout_toRightOf="id/scheduleType"/文本框的位置設(shè)置位于右方 android:drawableRight="drawable/schedule_type"/文本框的位置設(shè)置位于下方下面還有時(shí)間的點(diǎn)擊修改框、日程文本框及最后的保存及取消的按鈕。最后效果如圖2.22-1。 圖2.22-1 日程添加界面效果圖(2)寫一個(gè)ScheduleAddActivity 類來調(diào)用布局和書寫方法新增界面的上方有兩個(gè)TextView是用來選擇類型的,另有一個(gè)時(shí)間顯示框可以用來顯示傳過來的時(shí)間或者

47、修改時(shí)間。選擇類型的實(shí)現(xiàn)方法以其中一個(gè)為例首先是取得這TextView的位置,實(shí)例化它,以便于后面的使用,scheduleType = (BorderTextView) findViewById(R.id.scheduleType);點(diǎn)擊時(shí)跳到選擇界面并傳值,跳轉(zhuǎn)的時(shí)候需要獲得原來界面上的日程類型,這里需要在點(diǎn)擊觸發(fā)效果的方法上將數(shù)據(jù)傳到類型選擇頁面上去,用于顯示它的默認(rèn)值。scheduleType.setOnClickListener(new OnClickListener() /日程類型的點(diǎn)擊事件 Overridepublic void onClick(View v) /點(diǎn)擊時(shí)方法實(shí)現(xiàn)的內(nèi)

48、容schText = scheduleText.getText().toString();Intent intent = new Intent();intent.setClass(ScheduleAddActivity.this, ScheduleTypeView.class);/實(shí)現(xiàn)頁面從日程添加頁面到日程類型選擇頁面的跳轉(zhuǎn)intent.putExtra("sch_remind", new intsch_typeID,remindID);/跳轉(zhuǎn)時(shí)需要傳過去的數(shù)據(jù),兩個(gè)數(shù)據(jù)組成一個(gè)數(shù)組傳過去startActivity(intent);/運(yùn)行);這樣就需要一個(gè)新建Schedu

49、leTypeView文件來實(shí)現(xiàn)跳轉(zhuǎn)后的界面。這里還包括一個(gè)CalendarConstant類,這個(gè)類是用于記錄日程類型和重復(fù)類型的字符數(shù)組,以便于類型選擇的調(diào)用。public class CalendarConstant public final static String sch_type = "會議", "約會", "電話", "紀(jì)念日", "生日", "課程", "其他" ; / 日程類型的值public final static String re

50、mind = "當(dāng)天有效","每天重復(fù)","每周重復(fù)","每月重復(fù)","每年重復(fù)"/重復(fù)類型的值這里是存儲ScheduleTypeView和ScheduleRemindView里面選項(xiàng)的value值。這個(gè)頁面是通過實(shí)例化來實(shí)現(xiàn)布局的:LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); /設(shè)置寬與高cc = new

51、 CalendarConstant();layout = new LinearLayout(this); / 實(shí)例化布局對象layout.setOrientation(LinearLayout.VERTICAL);layout.setBackgroundResource(R.drawable.schedule_bk);/設(shè)置背景圖片layout.setLayoutParams(params);實(shí)例化布局里的組件為后面使用時(shí)做準(zhǔn)備,用于給這些組件添加各項(xiàng)參數(shù)。group = new RadioGroup(this);/選擇按鈕組btSave = new BorderTextView(this,n

52、ull);/保存按鈕實(shí)例化btCancel = new BorderTextView(this, null); /取消按鈕實(shí)例化textTop = new BorderTextView(this, null); /頂部文本實(shí)例化這里有個(gè)從ScheduleAddActivity傳來的值,是日程新增界面里的日程類型的已選擇的ID值,用來選擇RadioGroup的默認(rèn)選項(xiàng)Intent intent = getIntent();int sch_remind = intent.getIntArrayExtra("sch_remind"); if(sch_remind != null)

53、 /判斷不為空時(shí)進(jìn)行下列的賦值sch_typeID = sch_remind0; /日程類型的賦值remindID = sch_remind1; /重復(fù)類型的賦值for(int i = 0 ; i < cc.sch_type.length ; i+)radio = new RadioButton(this);if(i = sch_typeID) /判斷是否是當(dāng)前選擇的項(xiàng)radio.setChecked(true); /設(shè)置為已選擇 radio.setText(cc.sch_typei); /設(shè)置文本內(nèi)容 radio.setId(i); /設(shè)置編號 radio.setTextColor(C

54、olor.BLACK); /設(shè)置文本顏色 group.addView(radio); /設(shè)這系列的內(nèi)容添加到數(shù)組中 將RadioGroup加入到布局中去:layout.addView(group); RadioGroup的觸發(fā)效果,再點(diǎn)擊這里的每一個(gè)選項(xiàng)都會顯示已選中并且會將選擇項(xiàng)的ID值傳到schType_temp中用于后面的使用。group.setOnCheckedChangeListener(new OnCheckedChangeListener() Override/重寫onCheckedChanged方法public void onCheckedChanged(RadioGroup

55、group, int checkedId) schType_temp = checkedId;/給在上面建立的參數(shù)賦值);添加確定和取消按鈕(以確定按鈕為例),按鈕在這邊也是通過動態(tài)方法來實(shí)施的,先新建一個(gè)布局參數(shù)layButton = new LinearLayout(this);然后給參數(shù)設(shè)置各項(xiàng)屬性,這些都是按鈕所需要兼?zhèn)涞幕緦傩?,有利于按鈕的美觀與實(shí)用性,layButton.setOrientation(LinearLayout.HORIZONTAL);layButton.setLayoutParams(params);btSave.setTextColor(Color.BLACK)

56、; /設(shè)置文本顏色btSave.setBackgroundResource(R.drawable.top_day); /設(shè)置背景btSave.setText("確定"); /設(shè)置按鈕上的文本信息btSave.setHeight(47); /設(shè)置高btSave.setWidth(160); /設(shè)置寬btSave.setGravity(Gravity.CENTER); /設(shè)置按鈕位置btSave.setClickable(true); /設(shè)置按鈕的可點(diǎn)擊性layButton.addView(btSave); /將保存按鈕添加到按鈕參數(shù)中最后將整個(gè)layButton的參數(shù)加入到整體布局中去,這里面包括添加的保存和取消按鈕這兩個(gè)功能按鈕。layout.addView(layButton); 按鈕的界面建立以后這需要為這兩個(gè)按鈕添加它上面的觸發(fā)效果,首先是確定按鈕,這個(gè)按鈕的設(shè)計(jì)是當(dāng)點(diǎn)擊按鈕后則會將已得到的schType_temp值賦給sch_typeID,然后繼續(xù)通過傳值的方法將其返還到日程添加界面去。這里傳值的方法與從日程添加界面?zhèn)髦颠^來的方法相類似。/觸發(fā)確定按鈕btSave.setOnClickListener(new OnClickListener() Overridepublic void onClick(View v) sch

溫馨提示

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

評論

0/150

提交評論