关键词不能为空

当前您在: 主页 > 英语 >

基于Android的日历系统

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-28 01:19
tags:

-

2021年2月28日发(作者:ronald)


第一章



引言



1.1


项目背景


现在的智能手机已经非常普遍,而且其在生活中所占据的分量以及发挥的作用


也是越 来越重要,而且,查看时间、日期等功能也越来越完善。基于


Android

< p>
操作


系统的智能手机具有非常完善的数据读取功能,


这样的优势就可以非常方便的设计


日历。同时,


Androi d


操作系统源代码都是公开的,可以在很多平台免费获取相应


的 资源,所以这些信息就可以很轻易的得到。很多用户都需要一个日历系统,方便


随时方便 的查询时间日期等,这也是所有手机都具有的基本功能。在开发新的日历


系统时,一定要 保证具有稳定的性能以及很好的客户体验,很好的将这些系统打造


成日常生活不可或缺的 产品以及方便稳定的工具,


这样的生活助手在生活中一定具


有很 广阔的市场前景,同时也要保证外形美观,功能丰富。



本文主 要阐述了


Android


操作系统的开发环境,


发展现状以及主要组成模块等,


对于该系统的开发应用程序进行了分析,


还阐述了其在将来市场环境中具有前景以


及不足进行了分析。本次开发 的操作系统,可以实现查看日期等基本功能,还可以


查询指定日期以及将相应的日期进行 阳历与农历的转换。对于日期的管理,可以设


置相应的跳转功能,也可以制定日期提醒, 设备备忘录等。



1.2


选题意义


本文开发的日历系统基于


Android


操作系统,能够实 现原来设计的基本功能,


包括查询日期以及显示制定日期等,而且能够针对阳历转换为相 应的农历日期,还


有日期管理功能。对于特殊节日的管理,系统也有相应的应对功能;对 于日期的管


理,可以设置相应的跳转功能,也可以制定日期提醒,设备备忘录等。该系统 人机


界面良好,操控性能好。



1





第二章


Android


操作系统简介



2.1 Android


操作系统基本结构



A ndroid


操作系统可以划分为四层结构,从最底层开始依次是应用层、应用框


架层、系统运行库层以及


Linux


内核层, 基本结构如图


1-1.




2-1 Android


操作系统基本结构




1


)应用层(


App1ication




应用层主要用来与用户进行交互, 也就是一个人及操作界面,允许用户通过点


击等动作完成相应的操作。

< br>Android


系统也自带一些基础性的应用和操作,比较常

用的包括


Home



Contac ts


以及


Phone


等。设计时可以依 据这些应用框图完成相应


的设计工作,主要有


API

< p>
程序等。这些基础性的应用程序需要在宣传之后,才能获


2



得相应的推广,从而得到形影的用户群体。


< br>(


2


)应用框架层(


App1c ation Framework




一般系统设计者在


Android


操作系统上开发相应的


API


程序,这就需要系统能


够有很好的使用 ,所有的功能都可以复,基于这种研发体系,就可以开发很好的操


作系统,将这些系统应 用在


Android


操作系统上。在开发应用程序时需要用到的 组


件包括:



1



UI


组 件,也就是前台操作的


UI


界面,常用的空间包括


List



Table


等, 这


些都是最基本的组件。



2


)内容服务器组件,这一组件的主要作用就是提供一系保证数据连接或者交


换的服务,或者实时共享这些数据,最常见的就是电话本、短消息等功能,一些其


他的 应用程序也可以基于此组件完成通讯录或者短息的访问,比如说,支付宝可以


自动读取联 系人。



3


)资源管理器组件,这一组 件一般完成的功能是识别图片、字体的格式以及


ID


数据等,这 些资源和数据可以对系统的资源进行进一步的管理或者享用。



4


)消息通知管理组件,该组件对于该系统上所有通知进行管理,提示用户查

< p>
看相应的数据信息,常用的包括微信好友信息的提醒,此时系统的呼吸灯能够显示

< br>相应的闪烁频率,提醒用户查看消息。



5


)活动管理组件,该组件可以保证所有的应用程序都能够在其生命周期内完


成 数据的控制与管理,所有的连接都在规定时间内有效,一般所有的组件都对应相


应的窗格 ,这是软件进行交互的基础,是界面变化的基础。



6


)窗口管理组件,该组件完成了全部应用窗体的开启的管理。



7


)位置管理组件,该组件的基本功能是借助


G PS


完成客户的定位信息。



8


)电话管理组件,该组件针对手机上所有的通话数据进行保存以及采集。



9


)包管理组件,该组件的功能如期名字一样,可以对系统 中全部的应用系统


进行管理。




3


)系统运行库层(


Libraries< /p>




系统运行库层(主要是操作系统最底层的操作,不用过多介绍。



1



系统


C< /p>


库模块:


该模块一般是从系统自带的模块库里查询相应的标准数据 ,


完成


BSD


的集成,这些数据可以作 为嵌入式系统开发的备份文件。



2


) 媒体库模块。该模块主要是进行媒体文件的解码、播放等操作,能够解码


的格式包括


MP3,MP4,JPEG, MPEG4


等。



3

< br>)界面管理模块:该模块可以需要显示的所有子界面进行管理。



4



WebKit


模块:该模 块可以保证浏览器具有充足的引擎工作,这样就可以保


证操作系统具有足够的空间嵌入视 图信息。



5



SGL


底层的


2D


图形引擎。



6



OPENGL|ES


模 块:该模块主要是保证系统能够实现


3D


的效果,借助一些


高品质的心态可以保证系统具有一些加速功能。


< br>7



FreeType


模块:该 模块具有一些矢量显示功能和图文等。



8


SQLite


模块:该模块可以适用于全部的应用窗体, 功能非常强大,一般都


是在关系型数据库中显示的比较多。




3



9



Core Libraries< /p>


模块:该模块的主要作用就是基于


Java


平台开发相应的数据


库,完成相应的数据处理功能。



10



Da1vik VM

< p>
模块:该模块可以保证操作系统保持虚拟机状态,这样便于计


算机能够开发 相应的


JVM


功能。




4



Linux

< p>
内核层(


Linux Kernel




系统的内核层一般是 保证系统操作的稳定性以及安全性,对系统的硬件以及软件进


行管理,设置相应的网络堆 栈,创建相应的模型服务。



只有了解了


Android


操作系统的基本特点,才有可能更好的开发基于此系统的软件


和程序,在深入了解了此系统之后就可以在开发软件以及系统的过程中,不走或者


少走弯路,开发更加完美的系统。



2.2 Android


系统组件



总的说来, 基于安卓操作系统的应用程序分为四种:


Activity


、< /p>


Broadcast Intent


Receiver



Service


以及


Content


Provide


。需要注意的是,个别的操作 系统是不具有


完整的


4


组件构成,所有 的组件一般都要列在


1


中,这样就方


便 系统中制定形影的功能和条件,



Activity

< p>
是最基础的类别,这是一个非常常用而


且能够单独显示的组件,一般作为单 独的类别显示。系统中所有用到的类都必须从


主类中继承过来。所有视图的显示都是基于 用户控制界面显示相应的视图控制组件,


这样就可以及时给出响应,一般广播类型接收器 都以外部数据接口为对接类型,这


样的接口还有


Web service


,这样也可以获得相应的数据接口。



(1) Activity


简介


< /p>


应用软件的开发一般是将


Activity


组件作为单独额页面显示,通常情况下可以


针对所有的页面功能进行显示。

< p>


(2) Service


简介



这一程序应该是具有一定的寿命 时间,所有的程序都执行在这些程序,最后的


程序属于监视类型。



(3) Broadcast Receiver


简介



该模块功能主要是广播接收器,


主要是将系统中的信息等进行识别或者是发送,


一半需要使用的 方法是


sendBroadcast()


方法,才可以快速的传 递信息和数据。



(4) ContentProvider


简介



该模块主要是借助相应的数据程序将一些数据程序供应给相应的数据程序,这


在数据交 换过程中使用的频率最高,也可以进行信息的共享。



Andr oid


操控系统的很多数据都是显示为图片或者视图,可以支持


Content


Provider


的设定,一般处于系统的底 层端口。这些数据访问也需要被授权,在访问


以及共享数据的时候,一定要以方便用户使 用为最高标准。



2.3 Android


主要控件




1




EditText


主要函数


:



setText/getText


设置


/


获取文本内容




setHint


设置缺省显示内容



4




2




RadioGroup,RadioButton


Radio Button



isChecked()


判断是否被选中



获取选中


Radi oButon



ID:


设置

< p>
heckedChangeListener


方法



public onCheckedChanged(RadioGroup group,int checkedId)//checkedId


是选中

< p>
RadioButton



ID

< br>。




3



CheckBox


isChecked()


判断是否被选中



setOnCheckedCha ngeListener


方法监视选中状态改变情况




4



Spinner


a,


显示数据



b,


设置下拉列表的风格


(


可选


)


pDownViewResource(_spinner_d ropdown_it


em);


c,


监听选项选择变更事件



setOnItemSelectedListener


设置监听去



SelectedListener


类须 实现以下两个方法



public void onItemSelected (AdapterView parent, View view, int position, long


id)//view


选中项实例


,position


选择项在

adapter


中的位置



public void onNothingSelected(AdapterView arg0)


d,


设置选中项


ection(position)//


索引从


0


开始



getSelectedItemPosition ()


getSelectedItem () //


该值

< p>
toString()


则为选中内容的字符串



getSelectedItemId ()


getSelectedView ()


< br>5



AutoCompleteTextView


setAdapter


设置数据


adapt er



6



DatePicker,TimePicker


a,DatePicker


b,TimePicker


c,


获取系统当期时间和日期



tance()


返回


Calendar


(int field) ---field


可以为


/ /



_OF_MONTH/ _OF_DAY/



7



ImageView/ImageButton


主要方法



setImageResource


设置显示图片



setAlpha


设置


Alpha


invalidate


强制更新



setScaleType( ScaleType st)


设置图片显示方式


,st


是一枚举



setAdjustViewBounds


设置是否调整控件适应图片大小



5



setBackgroundResource


设置背景




8



GridView(


表格显示一系 列图片


)


显示数据



setAdapter(ListAdapter adapter)


设置数据适配器


.


数据适配器可以继承自


BaseAdapter,


该类



public View getView(int position, View


convertView, ViewGroup parent)


返回当前选择的视图


(ImageView)


选项选中监听


setOnItemSelectedListe ner


getSelectedView()


返回当前选中的 视图




9



ListView


a.


显示数据


setAdapter(ListAdapter adapter)


adapter


可为


new SimpleCursorAdapter/SimpleAdapter(Context context, int layout,


Cursor c, String[] from, int[] to)


layout


用来显示数据的模板


.


显示一列可用


_list_item_1


两列可用


_list_item_2


多列则需要自己实现


xml


视图布局文件



b.


动态增删数据



DataSetChanged()


c.

数据


(


可用


ArrayList< /p>


构造数据


)


from ':


to


用来显示对应列的空件


id




6



第三章



基于


Android


的日历应用



3.1


需求分析



3.1.1


系统目标



本次系统开发是设计一个日历系统,并在安卓平台上应用,包括查询日期以及


显示制定日期等,而且能够针对阳历转换为相应的农历日期,还有日期管理功能。


对于特 殊节日的管理,系统也有相应的应对功能;对于日期的管理,可以设置相应


的跳转功能, 也可以制定日期提醒,设备备忘录等。



3.1.2


功能需求描述



开发的日历系统需要实现的基本功能如下所示:




1


)能够方便高效的查询日期,包括年月日、节日 、阴历等。




2

)对于国内外传统节日以及八卦节日都能够提前查询或者显示。


< br>(


3


)管理日程,或者定期查询、删改一些数据信息等。




4


)将阳 历日期与阴历日期进行转换。




5< /p>


)提前查看指定日期。




6


)定位日期功能。



3.1.3


界面需求分析



用户界面是用户进行操作的界面,借助该界面可以对系统进行操作,不过这些

数据应该与客户的需求相关,用户的满意才是系统能够生存的基础,一定要具有良


好 的人机界面。




1

< br>)人机界面良好,方便查看,所有信息显示清晰。



(< /p>


2


)信息显示丰富,当天信息应包括一些特殊信息以及针对此信息 的提醒。




3


)当月信息与前后月信息区别显示。



4


)查询功能丰富。



3.1.4


运行需求分析



要求日历系统能够安装 方便,运行平稳,在运行过程中保持平稳流畅,而且能


够自适应频幕尺寸。



3.2


系统概要设计



3.2.1


系统功能结构



这次开发的系统可以在主界面上设置显示当时的日期,在副界面上显示转换功

能,也有一些日期管理、跳转等设置,对于日期的定位,需要设置相应的日期,最


后 的主界面如图


3-1











7




3-1


日历系统功能结构




3.3


系统主界面的设计和实现



3.3.1


系统的日历界面



系统主界面默认选择日历界面在头部菜单栏下方。


< p>


1


)首先是建立一个布局文件,上面一部分是显 示年月日、生肖和农历的干


支纪年。使用的是一个


TextVi ew


类,对应的在日历的


CalendarActivity< /p>


文件中加入


函数来添加头部的年份等信息。




CalendarActivity

中实例化


CalendarView


。并且使用

< p>
CalendarView


中的一个


方法,


CalendarView(this, getResources(),jumpMont h,jumpYear,year_c,month_c,day_c);


< p>
用来书写方法来添加头部信息。



首先是对这个页面的头部进行布局,通过动态化的方法来完成。



然后建立一个可以进行改变值的


StringBuffer


类型的参数


textDate


< p>
对这个参数


8



进行< /p>


append


操作,添加例如年月日的知道参数里。其中有一个闰 年判断的条件函


数。是通过


pMonth()

< br>的值惊醒判断的。完成后对界面使用


setText


方法


来赋值到界面上。



最后是对界面的一些美化,同样使用动态布局模式进行。




2


)下面是日历界面中主体日期部分显示 的完成




CalendarActi vity


文件初始化实例对象时加入动态添加布局文件的方法。



将此方法命名为


addGridView



由于这里用的是


GridView



应用于将一系列的


空间组织成二维网格的形式显示出来。所以 ,适用于我在这里进行的日期界面的建


立。


< br>同样的首先是动态化布局的建立。


这可以实例化


Grid View



gridView


参数进< /p>


行的。在这里需要添加


GridView


控件的列为


7


,列宽为


46

< p>
。并且这需要加入取得


屏幕大小的对应函数。这里如果是

< br>800*480


屏幕的话,就将列宽设置为


69



然后进


行设置水平和竖直的间距、取值边框、 设置居中等操作。



在这个方法里面还需加入个


OnTouch


方法。用来将


gridView


中的触摸事件回


传给


gestureDete ctor


,即:















//< /p>



gridview


中的触摸事件回传给


gestureDetector



















});


@Override


publicboolean


onTouch(View v, MotionEvent event) {




}


return


Calendar Activity.


this


.gestureDetecto r




.onTouchEvent(event);


创建完日历的 布局后,是在里面添加上具体的日期。就当前显示的页面来说,


是建立几个对应的参数, 用来显示或传接数据。例如在函数开始时就


String[]


dayNumber = new String[49];


这 是作为对


GridView


控件内进行标记序列的,用于下面< /p>


条件语句的判断等,还有就是界面内的一些控件名的实例化。然后是动态化的对页


面进行属性值的设置。



下一步是当前月信息的 显示,这也需要条件函数来判断是否为当前月,也是来判断


参数


position


是否在范围内。在这个月中还需对当天来一个特殊化。设置当天日期的


背景为图片


current_day_bgc

< br>。并设置字色为


#000000




9




在这些操作外,还需要得到一些数值来用于日期数据的插入,在这里建立了个


getCa lendar


方法,如判断是否为闰年的函数返回值


isLea pyear


,某月的总天数,某月


的第一天是星期几,上个月总 天数。在这方法中再执行方法


getweek


,用来得出以后< /p>


需要标记的日期,这个在后面来介绍。



通过上述的步骤基本完成了日历界面中的初步建设。




3


)由于日历菜单需要能通过手势触摸来进行 翻页,所以要在总体布局下建


立一个


ViewFlipper< /p>


类。这个类是用来实现屏幕的切换效果的。先是在布局中建立


这个 类。实例化手势


gestureDetector


,取得布局中


ViewFlipper


。这样就可以用于下

< br>面的调用。



然后是书写书写手势的各个方法。最主要的 是


onFling


的方法实现页面的向左及向右


滑动的操作。



IF


语句来实 现,


由滑动开始直接输的


x


坐标的值进 行差值计算。


当差


值大于


120


时着向左滑动。


在滑动操作开始,


就需要载入 新的一张日历页面。


这里又


会用到参数


calV


,当


onFling


方法实现 时,会将参数


calV


所代表的函数


C alendarView


里的


jumpMonth



1


,代表下一个月。当向右滑动时则将参数


calV


所代表的函数


CalendarVi ew


里的


jumpMonth



1


,代表上一个月。为了完整性剩余的手势函数只是

< br>写了方法未使用。



3.3.2


系统的日历特色显示



这里我肯还需要做干支纪年和节假日阴历显示。



这里有两个方法,分别是


LunarCalendar



SpecialCalendar





LunarCalendar

< p>
里面包括干支纪年,阴历,生肖,节假日等信息。



例如生肖则是建立一个字节数组来记录十二生肖,并且用函数来传回参数对应的生


肖。




final public String animalsYear(int year) {




final String[] Animals = new String[] {












< br>





< /p>





< p>






return Animals[(year - 4) % 12];



}


同样的其 他信息,如节假日的名称,也是通过字节数组来储存的。



10




SpecialCalendar


是闰年的判断函数、天数。最后是对每月的第一天星期的判


断。



闰年通过传回年值通过函数进行判断,并传回布尔值。



每月的天数用


switch


进行判断赋值给月 份天数的参数。






对每月的第一天为星期几的判断并指定。


//


指定某年中的某月的第一天是星期几



public int getWeekdayOfMonth(int year, int month){



Calendar cal = tance();



(year, month-1, 1);



dayOfWeek = (_OF_WEEK)-1;



return dayOfWeek;


}








3.4


系统任务界面的设计



任务界面包括任务主界面(所有日程的显示)和对应日期任务的显示,任务的

添加等。



在任务界面涉及到日程的数据存储,

< p>
所以先介绍下关于日程的数据存储以及有


日程的日期存储(为日历界面的标 记服务)




3.4.1


任务界面的数据库准备



< p>
1


)数据库里表的建立



分别建立了


schedule



(日程 的表)



scheduletagdate

(标记日期所需的表)




Android















建< /p>



DBOpenHelper






SQLiteO penHelper


。实现


onCreate




onUpgrade


两个方法。



OnCreate


方法是用于初次使用软件时生成数据库,


onUpgrade


方法是用于升级


软件时更新数据库表结构。


< /p>


首先是


schedule


表的建立。表中 包括四个参数。如下图


3-2


所示。建立时对应


需要写上参数名、参数类型、主键等。



11



日程


ID


日程类型


ID


Schedule


日程重复类型的


ID


日程正文内容





3-2 schedule


所包含的参数



L(


primary key autoincrement,scheduleTypeID integer,remindID integer,scheduleContent


text,scheduleDate text)





3-3



scheduletagdate


表的建立。在这个表中包括以 下参数。


标记的


ID



年信息



scheduletagdate



月信息



日信息





3-3


scheduletagdate


所包含的参数



L(


primary key autoincrement,year integer,month integer,day integer,scheduleID integer)


}




建立完表后是继续写入

< p>
onUpgrade


方法,这个方法会在数据库升级时被触发,以便


于软件升级时更新表结构。



12




2


)再分 别建立


ScheduleVO



Sch eduleDateTag


,里面分别写了表里面各个数据的


get


(表示获取某个变量值)和


set


(表示设置某个变量值)方法,以便于调用。



< p>
3


)建立


ScheduleDAO


文件,这个文件是用来写数据库的查找、删除等方法。



首先是需要实例化


DBOpenHelper


用于数据库数据 的


get



set







private


DBOpenHelper dbOpenHelper =


null


;


public


ScheduleDAO(Context context){



dbOpenHelper =


new


DBOpenHelper(context,


}


下面就是对表中数据的操作了。包括了保存日程信息、查询 某一条日程信息。


查询所有的信息、删除日程、将日程标记的日期保存到数据库中。




1


)保存日程 信息,先是从日程添加页面里获取日程类型的


ID


、日程重复类


型的


ID



日 程正文内容、


日程日程时间这几个参数,


然后是使用

< p>
ContentValues



(这


个类是一个键值对,


是用来存储名值对,


它的名一般 是


String


类型,


而值都是基本类


型)来


new


一个参数,用这个参数的


put


方法将这些个参数放入到数据库中。


(


//


放入日程类型

< p>
ID


(


放入重复类型


ID


(


//


放入日程正文内容


< /p>


(


//


放入日程日期信息



最后调用添加方法


insert










(


null


, values);//


插入信息



另外 需要


moveToFirst


方法来判断是否为空,进行相关的 操作。




2



查询某一条日程信息,


由于我这里的设计是通过对日程的点击 来查看当前


点击日期的详细信息,


即是根据日程的


ID


来查看的。


android sqlite


的查询方法是


query


方法,它的查询语 句是:



(


new



String[]{


},


new


String[]{String.

< br>valueOf


(scheduleID)},


null


,


null


,


null


);




另外还需要的是判断语句。


先用


First()



可以

判断


curor


是否为空值,


不为 空则就给


cursor


赋值,空着直接


()


来关闭。



3



查询所有的日程信息,


由于所 有日期可能不止一个,


所以返回值设为数组


13



形式。查询依旧是用


query


方法,这里的的


where


语句相关的就直 接设为


null


值。其他


的依旧与查询 一条语句相仿。




4



删除日程,


这里的删除日程需要将日程及对应日期上 的标记一起删除,



样才可以便于管理,删除使用的语句是


delete







(


new



S tring[]{String.


valueOf


(sched uleID)});//


删除日程信息






(


new



S tring[]{String.


valueOf


(sched uleID)});//


删除日程对应的日期标识信息




5



将日程标志日 期保存到数据库中,


这里是为了将在日期上标识的信息存储


到数 据库中,方法同第一步的保存相仿,只是数据的不一样,而且使用的是数组形


式。





for


(


int


i = 0; i < (); i++){//



for


循环的方式进 行






dateTag = (i);





ContentValues values =


new


ContentValues();





(


放入年信息






(


放入月信息






(


放入日信息






(


翻入日程的


ID





(


null


, values);//


插入到表


scheduletagdate





}



6


)< /p>


只查询出当前日程的日期,


这个查询语句是通过当前月的年和月信 息来得


到日程标记上的所有信息。


这里也是使用


query


语句进行查询的,


只不过改变了里面


的查询使用的参数。所以方法类同于上面所有日程的查询。





7


)当点 击每一个


gridview



item



,


查询出此日期上所有的日程标记< /p>


(scheduleID),


通过点击后得到对应日期的年月日 信息,


然后用


query


方法得到次日 程标记的


ID



于后面得到想到相关的日程信息。



query(



new


String[]{


new



Stri ng[]{String.


valueOf


(year),St ring.


valueOf


(month),String.< /p>


valueOf


(day)},


null


,


null


,


null


);


8


)关闭数据库。判断后直接关闭当前数据库。









if


(dbOpenHelper !=


null


){


();


14



3.4.2


任务界面之新增界面



新增界面是通过对日历界面上单一日期的点击来实现跳转的。




1


)首先为了界面的美观我建了几个 带边框的类。



首先是带下边框的


Te xtView


。这里


TextView


类的基础上用画笔实现了下边框的


效果。















Paint paint =


new


Paint();//


实例化一支画笔



or(.


BLACK


); //


设置所绘制的边框颜色为黑


ne(0,


this


.getHeight() - 1,


this


.getWidth() - 1,


this





.getHeight() - 1, paint); //


绘制下边框



带边框的


EditText


。在这里加上了特殊的样式、颜色及边框的圆弧效果。



Paint paint =


new


Paint();//


实例化一支画笔



okeWidth( 1);//


设置空心现款



le(St yle.


STROKE


);//


设置样 式



or(.


GRAY


);//


设置颜色



iAli as(


true


);//


抗锯齿方法< /p>



RectF rectF =


new


RectF(2,0,


this


.ge tWidth()-2,


this


.getHeight()- 2);


//


现在设置相关的参数用于下面的操作。

< p>


undRect(rectF, 8, 8, paint);//


画上圆弧



最后一 个是带边框的


TextView


。这个


与上述的


EditText


相类似,完成这个列。
















2


)新增 日程界面的布局,建立一个名为


schedule


的空布局文件 。这里的使用的是


相对布局


RelativeLayout


。这样可以更清晰将各个框框组合在一起,使得更加美观。



在这个界面中,总体的以


RelativeLayout


这个相对布局名为总体的布局类,最上


面是标题栏,这就是一个上述建立的一 个带边框的


TextView


类。











android:id=


< p>
//id







android:gravity =



//


位置居中




android:layout_width=







android:layout_height=

< p>


//


这两个分别为宽和高






and roid:background=



//


背景图片的位置






android:textStyle=


//


文本的样式加粗






and roid:clickable=



//


可点击的选项






android:textColor=


//


文本颜色设为黑色






and roid:text=



编辑日程



//


文本框上的文字





/>


15



下面分别为日程类型及重复类 型这两个类型的选择的点击框。由于使用的相对


布局,


那么就需 要自己设置这两个点击框的位置。


这里先建立了日程类型的文本框。


layout_below


来将这个文本框放在标题框( 用


id


来定位标题框)下面。下面几个需


要特殊设定的参数:



android:layout_be low=



//


文本框的位置设置





< p>
android:layout_width=



/ /


文本框的宽






android:layout_ height=



//


文本框的高









and roid:drawableRight=



//


在这个文本框右边添加



个图标


然后是添加日程重复方式的文本框,这需要放在日程类型文本框的右边。


这是利用


layout_ toRightOf


来实现。

相应的也要设置位于标题框下方,


其他的与


上面的相类似。



android:layout_toRightOf=



//


文本框的位置设置位于右方

< p>








and roid:drawableRight=



//


文本框的位置设置位于下





下面还有时间的点击修改框、日程文本框及最后的保存及取消的按钮。最后效

< p>
果如图


3-4






3-4


日 程添加界面效果图




2


)写一个


ScheduleAddActivity


类来调用布局和书写方法



16



新增界面的上方有两个


TextVi ew


是用来选择类型的,另有一个时间显示框可


以用来显示传过 来的时间或者修改时间。



选择类型的实现方法以其中一个为例



首先是取得这


TextView


的位置,实例化它,以便于后面 的使用,



scheduleType = (BorderTextView) findViewById(.


scheduleType


);


点击时跳到选择界面并传值。跳转的时候需要获得原来界面上的日程类型。这

< p>
里需要在点击触发效果的方法上将数据传到类型选择页面上去,用于显示它的默认

< br>值。



lickListener(


new


OnClickListener() {




//


日程类型的点击事件







@Override





publicvoid


onClick(View v) {





//


点击时方法实现的内容







schText


= t().toString();






Intent intent =


new


Intent();






ss( ScheduleAddActivity.


this


, Sc heduleTypeView.


class


);//


实现页面从日程添加页面到日程类型选择页面的跳转







ra(


newint


[]{sch_typ eID,remindID});


//


跳转时需要传过去的数 据,两个数据组成一个数组传过去







startActivity(i ntent);//


运行






}




});




这样就需要一个新建


ScheduleTypeView


文件来实现跳转后的界面。



这里还包括一个


CalendarConstant


类,


这个类是用于记录日程类型和重复类型的


字符数组,以便于类型选择的调用。



publicclass


CalendarConstant {



publicfinalstatic


String[]


sch_type


= {


会议



约会



电话



纪念日



生日

< p>


课程



其他



日程类型的值




publicfinalstatic


String[]


remind


= {


当天有效



每天重复



每周重复< /p>



每月重




每年重复



重复类型的值



}


这里是存储


Schedule TypeView



ScheduleRemindView< /p>


里面选项的


value


值。



这个页面是通过实例化来实现布局的:



Params params =


new



Params(Layout Params.


FILL_PARENT


,


17















LayoutParams.


WRAP_CONTENT


);









//


设置宽与高



cc =


new


CalendarConstant();


layout =


new


LinearLayout(


this


); //


实例化布局对象



entation( LinearLayout.


VERTICAL


);


kgroundResource(le.


schedule_bk


);//


设置背景图片



outParams(params);


group =


new


RadioGroup(


th is


);//


选择按钮组



btSave =


new


Bord erTextView(


this


,


n ull


);//


保存按钮实例化



btCancel =


new


BorderTextView(


this


,


null


); //


取消按钮实例化



textTop =


new


BorderTextView(


this


,


null


); //


顶部文本实例化



实例化布局里的 组件为后面使用时做准备,用于给这些组件添加各项参数。









这里有个从


ScheduleAdd Activity


传来的值。这是日程新增界面里的日程类型的


已选择的


ID


值。用来选择


Radio Group


的默认选项



























}


Intent intent = getIntent();



int


sch_remind[] = ArrayExtra(





if


(sch_remind !=


null


){

















//


判断不为空时进行下列的赋值





sch_typeID = sch_remind[0];








//


日程类型的赋值





remindID = sch_remind[1];







}//


重复类型的赋值




for


(


i nt


i = 0 i < _ i++){




radio =


new


RadioButton(


this


);




if


(i == sch_typeID){



















//


判断是否是当前选择的项






cked(


true


);











//


设置为已选择





}










t(_type[i]);







//


设置文本内容











(i);

























//


设置编号











tColor(Color.


BLACK


) ;




//


设置文本颜色











w(radio);


















//


设这 系列的内容添加到数组



RadioGroup


加入到布局中去:



w(group);







RadioGroup


的触发效果。


再点击这里的每一个选项都会显示已选中并且会将选


择项的


ID


值传到


schType_temp


中用于后面的使用。










heckedChangeLis tener(


new


OnCheckedChangeListener() {



@Override


//


重写


onCheckedChanged


方法




publicvoid


onCheckedChanged(RadioGroup group,


int


checkedId) {


18











}


});


schType_temp = checkedId;


//


给在上面建立的参数赋值



添加确定和取消按钮(以确定按钮为例),按钮在这边也是通过动态方法来实

< br>施的,先新建一个布局参数





layButton =


new


LinearLayout(


this


);

< br>然后给参数设置各项属性,这些都是按钮所需要兼备的基本属性,有利于按钮


的美 观与实用性,























entation(Linear Layout.


HORIZONTAL


);


outParams(params);


tColor(Co lor.


BLACK


);























//


设置文本颜色


< br>kgroundResource(le.


top_day


);




//


设置背景



t(


确定






//


设置按钮上的文本信息



ght(47);





//


设置高



th(160);






//


设置宽



vity(Gravity.


CENTER


);


















//


设置按钮位置



ckable(


true


);























//


设置按钮的可点击性



w(btSave);















//


将保存按钮添加到按钮参数中


< /p>


最后将整个


layButton


的参数加 入到整体布局中去。这里面包括添加的保存和


取消按钮这两个功能按钮。





w(layButton);

























按钮的界面建立以后这需要为这两个按钮添加它上面的触发效 果。首先是确定


按钮。这个按钮的设计是当点击按钮后则会将已得到的

< br>schType_temp


值赋给


sch_typeID


,然后继续通过传值的方法将其返还到日程添加界面去。这里传值的方

< br>法与从日程添加界面传值过来的方法相类似。



//


触发确定按钮





lickListener(


new


OnClickListener() {





@Override





publicvoid


onClick(View v) {






sch_typeID = schType_temp;


/ /


将上面得到的


schType_temp

默认值或改变后的值传给传


sch_typeID








Intent intent =


new


Intent();






ss( ScheduleTypeView.


this


, ScheduleAddActivity.


class


);


//


设置跳转的


class

< p>
文件参数







ra(


/ /


将上面得到的


sch_typeID


传到


schType


中以便于调用





19


-


-


-


-


-


-


-


-



本文更新与2021-02-28 01:19,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/677466.html

基于Android的日历系统的相关文章