代码应该是比较简单的,如果下载了源文件,理解起来会比较容易。而且贴出代码,显得太累赘,为此我做了下面这张图,其实就是对第一节那个简图的增加版:

使用 ViewPager 是因为我在官方教程里看到了这篇文章:Using ViewPager for Screen Slides,里面还提供了例程下载,再结合上图,可以了解整个过程。

运行的流程按我的理解如下:

  1. MainActivity执行,当屏幕初始化显示时,调用 onCreate() (这里用回调方式,可以避免对象在内存中创建,但未让屏幕显示时被执行画图处理,可以节约系统开支)
  2. onCreate() 中初始化 ViewPager,给出用于页帧管理的对象 CalendarPagerAdapter;设置初始要显示的页码。
  3. ViewPager 针对当前要显示的页码,向 CalendarPagerAdapter 请求包括相邻的两个页的 Fragment,共创建了三个帧对象。如果你用调试去跟踪,你会发现我在上面所说的现象,虽然是创建了三帧对象,但只有一帧的 onCreateView() 方法被调用,因为其它两帧还不需要在屏幕上绘制。
  4. 当某一帧要在屏幕上显示时,CalendarPagerFrament 类的 onCreateView() 方法被回调,在 onCreateView() 方法里,CalendarTableCellProvider 类的 getView 方法接着被调用,在循环里反复调用,直到一整个月所有的单元格被创建。

关于 Layout 如何被创建:

Layout 的 XML 文件,是在代码里被显式加载的,对于 Activity 类,是在 onCreate() 方法中的语句 setContentView(R.layout.activity_main); 来加载,在其它两处,则是使用语句inflater.inflate(R.layout.view_calendar_table, container, false); 来加载。

关于窗口样式:

在 MainActivity 里有一句 requestWindowFeature(Window.FEATURE_NO_TITLE); 而实际上,可以通过设置 Activity 的主题来实现,选择一个 NoActionBar 的主题就可以了。可以打开文件 AndroidManifest.xml,其中的 AboutActivity 被设置为 Dialog 主题风格,显示时就不会有标题栏。BTW,同时,AboutActivity 也不需要菜单,因此我将 IDE 自动生成的菜单 XML 文件,以及代码中的菜单事件处理函数都删除了。

代码的讲解这般就结束了,如果有疑问,可以评论提交。

[待续]

接下来一节再深入一下样式与主题,最后讲一下如何更换应用的图标,以及其它常用技巧。

Android 日历开发教程[六]相关推荐

  1. Android 日历开发教程[一]

    前言:决定开始学习 Android 平台下的软件开发,以日历作为实践项目,进行一周后,基本完成. 为了总结及笔记,并给有需要的朋友借鉴,开始整理本教程. 开始之前: 在编写程序之前,需要进行项目设计, ...

  2. Android 日历开发教程[四]

    这节开始制作 Activity 视图. 视图的设计,在原理上可以借鉴 HTML 设计,目前大家的共识是内容与样式分离,也就是内容在 HTML 文件中定义,样式在 CSS 文件中对应. 同样,Andro ...

  3. android 日历开发教程,android 开发教程之日历项目实践(三)

    二.创建样式 日历显示的表格线,使用 Cell 填充图形的边框来实现,为了统一,我们先定义边框线的颜色及线条精细. 另外还要定义一系统填充样式等. 创建 color: color_calendar_b ...

  4. Android 日历开发教程[三]

    二.创建样式 日历显示的表格线,使用 Cell 填充图形的边框来实现,为了统一,我们先定义边框线的颜色及线条精细. 另外还要定义一系统填充样式等. 创建 color: color_calendar_b ...

  5. android ndk 多线程mk,Android NDK 开发教程六: application.mk

    配合android.mk 使用的make 文件还有一个application.mk ,大部分情况无需修改该文件,下面也来自网络翻译 Application.mk文件 简介: ---------– 要将 ...

  6. Android 日历开发教程[二]

    一.创建 Android Project 在新建对话框中输入 App 属性,SDK版本全部选最新的,不作版本兼容.主题选择 Holo Dark. 下一步,使用默认设置 下一步,使用默认设置 下一步,使 ...

  7. Android 日历开发教程[五]

    农历计算类 农历计算的算法,来源于:http://sean.o4u.com/ap/calendar/,具体的代码基本与来源处的 javascript 相同,差不多只是语言上的转换而已. 将这个类命名为 ...

  8. android项目开发教程,Android项目开发教程

    Android项目开发教程 编辑 锁定 讨论 上传视频 Android项目开发教程 书    名 Android项目开发教程 作    者 车金庆.何征天.李琳.严正宇.周凌翱 类    别 图书&g ...

  9. Android WiFi开发教程(三)——WiFi热点数据传输

    在上一篇文章中介绍了WiFi的搜索和连接,如果你还没阅读过,建议先阅读上一篇Android WiFi开发教程(二)--WiFi的搜索和连接.本篇接着简单介绍手机上如何通过WiFi热点进行数据传输. 跟 ...

最新文章

  1. React Native 的图片加载方式
  2. 【算法基础】数据结构导论第三章-栈、队列和数组.pptx
  3. Mysql数据库大表归档操作
  4. JAVA第一个GUI程序---计算器
  5. 数据结构基础(12) --双向循环链表的设计与实现
  6. 【AI面试题】什么是数据不平衡,如何解决
  7. vc中运行外部程序的方法
  8. 【自动控制原理】 时域分析法
  9. Office系列软件之间不兼容以及office修复
  10. 记录下docker命令
  11. 优秀的程序员真的不写注释吗?
  12. 201819102040张辰飞
  13. 我没有基础,能学会Python吗?
  14. 药厂中PLD-601不溶性微粒检查仪IoT的流程梳理
  15. 模块化多电平变换器,MMC载波移相脉冲宽度调制
  16. 【web百度离线地图开发】原生实现百度地图离线版速览
  17. 怎么在mysql数据库中放图片_如何将图片储存在MySQL数据库中
  18. java qq登陆界面源码下载_javaSwingQQ登录界面
  19. 使用cmd命令修改IP地址
  20. python离散因变量模型

热门文章

  1. Hadoop 从入门到精通----编程不良人笔记
  2. 5s手机主题被删如何恢复
  3. Cocos2d-x 3.0 开发(八)骨骼动画的动态换肤
  4. 深度(穿透)选择器 ::v-deep /deep/ 及 >>>
  5. 心情烦躁的时候怎么缓解
  6. 从一道腾讯笔试编程题看——并查集
  7. hadoop单机及完全分布式集群的安装
  8. IOS开发之——数据库-基础知识介绍(01)
  9. 中国式家长游戏制作人php要学,当“中国式家长”成为游戏,果然火了!
  10. 三名学霸与计算机的缘,这三类家庭与学霸无缘,不是父母不用心,错在教育方式...