前言:本文在整理过程中由于水平有限,若有不当之处,请指正!
1 常见界面及布局的实现
1.1 日历主界面:
日历主界面是由AllInOneActivity实现,对应四种视图类型动态加载相应的Fragment实现。各视图如下:
(1) 日视图:在AllInOneActivity上加载了DayFragment,DayFragment的布局采用了自定义布局DayView,而填充该布局文件时用到了ViewSwitcher,ViewSwitch是一个视图切换组件,可以把多个视图重叠在一起,而每次只显示一个视图,而给ViewSwitch而创建要显示的View时,有两种方式:既可以在xml文件中添加,也可以通过实现ViewFactory,重写makeView()添加。源码中采用第二种方式,如下:
DayFragment的xml布局:
Java代码:
日视图效果如下:
(2) 周视图:也是加载了DayFragment,效果如下:
(3) 月视图:在AllInOneActivity上加载了MonthByWeekFragment,MonthByWeekFragment的布局是一个自定义的MonthListView,而MonthByWeekFragment继承了SimpleDayPickerFragment,这类继承了ListFragment,ListFragment是一个自身带有一个ListView的Fragment,在SimpleDayPickerFragment中,通过适配器SimpleWeeksAdapter给对应的ListView添加数据,这些数据包括周数、是否显示周数、每周的起始日、高亮显示的日期。效果如下:
(4) 日程视图:在AllInOneActivity上加载了AgendaFragment,AgendaFragment的布局文件也是使用了自定义的ListView:AgendaListView,并通过适配器AdendaWindoeAdapter加载日程数据。效果如下:
1.2 新建活动界面
在EditEventActivity上动态加载了EditEventFragment,并将EditEventFragment的视图对象传给了EditEventView,所有的控件的实例化和事件处理都在自定义的EditEventView中完成。界面如下:
1.3 设置界面
设置界面的Activity:CalendarSettingsActivity继承了PreferenceActivity,在CalendarSettingsActivity中又加载了GeneralPreferences和AboutPreferences两个PreferenceFragment。在PreferenceActivity中使用“Header+ Fragment”的模式,实现首选项设置,在当前Activity中展示一个或者多个首选项的标题,每个标题对应一个相应的PreferenceFragment,使用PreferenceActivity时,需要重写onBuildHeaders(List<Fragment> target)方法填充标题对应的PreferenceFragment。如源码中:
CalendarSettingsActivity的xml布局文件:
Java