面或者是日程显示界面。日历界面上还有对存在日程的标记,有利于人们更好的管理日程。
(2)日程管理模块:在本模块中包括总的日程显示页面和日历页面所跳转到的日程显示界面或者是日程添加界面。总日程显示界面每一个日程都会有它所包含的日期、时间、日程类型、重复类型和日程内容。日历日期所对应的日程显示界面也是相应的显示。而在日程添加界面中包含了显示界面所对应的各项数据、添加日程成功后会有对应日历日期的标记。另外也有对日程的一系列管理操作的功能。
(3)设置界面模块:在设置中包括了对日程的类型和重复类型的默认设置。
(4)关于界面模块:关于界面中包含了本软件的设计信息及一些基本信息。
3.2.2 系统的功能模块结构图
在程序设计分析的基础上,结合实际情况,得出本程序的功能模块结构图。在结构图中包括了功能模块的表示及其中部分功能的实现原理。
首先是一个总的功能模块的结构图,其中包括了系统设计时的总体功能概括,如图3-1。
图3-1 总系统功能模块
然后在总体的功能模块后面是主体功能的详细模块显示。在日历界面显示上可分为几个部分,详细见图3-2,
图3-2 日历显示模块
还有就是日程的功能模块的详细介绍。总体书写了日程添加界面的功能点,结构图如图3-3所示,
图3-3 日程界面模块
第四章 系统的详细设计
4.1 系统主界面的
4.1.1 系统主界面的头部菜单栏
制作这个头部菜单栏是为了提升软件的可操作性,我用的是TabHost+RadioGroup相结合的方法来制作这个部分的。菜单栏的底部位置是通过TabHost这个布局来实现的,然后是LinearLayout的线性布局来布置内容。内部的选项卡是通过TabWiget来实现
首先建立好Android工程(我的工程名为:ScheduleManager),在工程下的res/layout下建立一个名为main的空xml文件,然后在这个文件里按照思路来添加布局代码。
主界面的菜单选项使用RadioGroup来建立,在这里的布局中RadioGroup里容纳4个RadioButton,而RadioButton是单选按钮。在这种情况下就只有也只能有一个RadioButton能被选择,并且在开始时默认了第一个按钮被选中。其中RadioButton的实现方式是在设置了内部的文字,然后再按钮的顶部上添加上图片,实现的代码如下:
android:text="@string/main_date"
android:drawableTop="@drawable/tab_date"
android:id="@+id/radio_button0"
android:checked="true"
style="@style/main_tab_bottom"/>
从上述代码可以看到,在菜单的每个选项卡样式都是调用了style上的main_tab_bottom来实现样式的,而main_tab_bottom的背景background的值是@drawable/btn_bg ,btn_bg不是一个简单的背景图片,而是一个xml文件,通过这个文件可以实现菜单选项卡切换时的背景切换的效果,使得这个菜单栏更加的美观,代码是使用了安卓的selector来实现,在这里是通过不停的条件来判断使用哪一个item的,里面包括了几个属性值,如是否获得焦点、是否响应事件、是否点击三个条件。实施的代码如下:
xmlns:android="schemas.android/apk/res/android">
制定完主页面布局后,在src/com.manage.activity下的MainPage文件中OnCreate(OnCreate方法是用来初始化Activity实例对象的)中调用布局,到现在为止顶部菜单栏的布局已经基本完成,但现在里面所对应的内容还是空的。所以就需要在这里给tabHost中添加tab内容,以第一格的tab为例,先是通过Intent的方式新建个mDate,用来实现页面的跳转的方法,然后动态用tabHost来通过addTab的方法添加对应TabSpec的值和各个属性。
最后在添加RadioGroup的选择操作函数,这里是通过switch来完成对应按钮的功能的实现,在每个case项中通过tabHost.setCurrentTabByTag来给与特定的值实现页面上的跳转。
最终的效果如图4-1:
图4-1 头部菜单栏效果图
4.1.2 系统的日历界面
系统主界面默认选择日历界面在头部菜单栏下方。
(1)首先是建立一个布局文件,上面一部分是显示年月日、生肖和农历的干支纪年。使用的是一个TextView类,对应的在日历的CalendarActivity文件中加入函数来添加头部的年份等信息。
首先需要写了一个CalendarView类,这是为日历显示所写的一个类,在其中使用重载的方法定义了几个不同参数的CalendarView,用于不同的情况。
在CalendarActivity中实例化CalendarView并且使用CalendarView中的一个方法CalendarView(this, getResources(),jumpMonth,jumpYear,year_c,month_c,day_c);然后书写方法来添加头部的年份 闰哪月等信息。
首先是对这个页面的头部进行布局,通过动态化的方法来完成。
然后建立一个可以进行改变值的StringBuffer类型的参数textDate。对这个参数进行append操作,添加例如年月日的知道参数里。其中有一个闰年判断的条件函数,是通过calV.getLeapMonth()的值惊醒判断的。完成后对界面使用setText方法来赋值到界面上。
最后是对界面的一些美化,同样使用动态布局模式进行。
(2)下面是日历界面中主体日期部分显示的完成
在CalendarActivity文件初始化实例对象时加入动态添加布局文件的方法。
我将此方法命名为addGridView。在这个方法中同样是先进行动态化布局,由于这里用的是GridView,这个GridView应用于将一系列的空间组织成二维网格的形式显示出来,所以适用于我在这里进行的日期界面的建立。
同样的首先是动态化布局的建立,这可以实例化GridView为gridView参数进行的。在这里需要添加GridView控件的列为7,列宽为46。并且还加上判断屏幕大小的条件,这需要加入取得屏幕大小的对应函数,这里如果是800*480屏幕的话,就将列宽设置为69。然后进行设置水平和竖直的间距、取值边框、设置居中等操作。
在这个方法里面还需加入个OnTouch方法,用来将gridView中的触摸事件回传给gestureDetector,进行下面的触摸操作,即:
//将gridview中的触摸事件回传给gestureDetector
@Override
public boolean onTouch(View v, MotionEvent event) {
return CalendarActivity.this.gestureDetector
.onTouchEvent(event);
}
});
创建完日历的布局后,是在里面添加上具体的日期。就当前显示的页面来说,是建立几个对应的参数,用来显示或传接数据。例如在函数开始时就String[] dayNumber = new String[49]; 这是作为对GridView控件内进行标记序列的,用于下面条件语句的判断等,还有就是界面内的一些控件名的实例化。 然后是动态化的对页面进行属性值的设置。
其中在对日期中的第一行,即周一等值的这行,设置字的颜色及背景图。得出这行的位置就需要通过对参数position(对应编号)进行判断是否在7以内。
下一步是当前月信息的显示,这也需要条件函数来判断是否为当前月,也是来判断参数position是否在范围内。在这个月中还需对当天来一个特殊化,即设置当天日期的背景为图片current_day_bgc,字色为白。
在这些操作外,还需要得到一些数值来用于日期数据的插入,在这里建立了个getCalendar方法,如判断是否为闰年的函数返回值isLeapyear,某月的总天数,某月的第一天是星期几,上个月总天数。在这方法中再执行方法getweek,用来得出以后需要标记的日期,这个在后面来介绍。
通过上述的步骤基本完成了日历界面中的初步建设。
(3)由于日历菜单需要能通过手势触摸来进行翻页,所以要在总体布局下建立一个ViewFlipper类,这个类是用来实现屏幕的切换效果的。先是在布局中建立这个类,然后实例化手势gestureDetector并取得布局中ViewFlipper用于下面的调用。
然后是书写书写手势的各个方法,最主要的是onFling的方法,在这里实现了页面的向左及向右滑动的操作,这个操作是由条件语句来实现的,由滑动两点的x坐标的值进行差值计算,如果是起点减去重点大于120时着向左滑动,反之则向右滑动。在滑动操作开始,并且已切换一面后就需要载入新的一张日历页面,这里又会用到参数calV,当向左滑动时则将参数calV所代表的函数CalendarView里的jumpMonth加1,代表下一个月;当向右滑动时则将参数calV所代表的函数CalendarView里的jumpMonth
上一篇:安卓公交查询系统毕业论文
下一篇:计算机网络毕业论文