2C课程笔记分享_StudyJams_2017
课程2C-实践:创建交互式应用
概述
- 课程2C的内容主要是练习巩固2A、2B中讲解的内容,并设计实现一款篮球比赛的计分板应用及其界面的美化。
Warm-Up:准备活动
新建项目PracticeSet2(包名android.example.com,Minimum SDK:API 15,Empty Activity),主要练习了int型变量的声明和初始化。
这部分练习要想实现的功能是计算一个人一周的睡眠时间与推荐值之间的差距。课程中的代码计算过程有一个逻辑错误:只计算了一个工作日(weekday)的睡眠时间,而漏掉了剩下4天工作日的睡眠时间。
课程中介绍:通过手动模拟程序运行(hand simulation)的方法,可以帮助程序员避免逻辑错误。主要的思路是比较"what the program does"与"what we actually do"接下来的一些练习有计算通勤者花在路上的时间、计算购物清单总价等等,它们都是为了帮助初学者修复或者避免代码中的逻辑错误。
第三部分(Part 3)的练习的主题是作用域(scope)。在HealthyLiving(健康生活)这一块儿的练习中,解释了为什么不使用全局变量:a)使用到当前变量的地方并没有跨方法(即该变量只在一个方法中用到);b)该变量存储的是一些中间值,更新的频率很高,不适于共享,因此也就不适于使用全部变量;3)可以避免错误:滥用全局变量的话,有可能引入副作用(side effects,在程序设计的语境中,表示发生了程序员不知道且不期望的行为)。即全局变量的值可能在其他地方“不小心”地被更改了,从而引入BUG。
关于全局变量与局部变量的选取问题,有一个基本原则:仅在必要的时候使用全局变量。一个简单的判断方法是,当你发现不用全局变量无法实现期望的功能时,就说明此时全局变量的使用应该是必要的。
CourtCounter:篮球计分板应用
a) 首先介绍了一些新的Android XML属性,TextView控件的gravity属性:指定文本的对齐方式,如“水平居中”、“垂直居中”等。
b) 关于padding(内边距)的提示:在Button控件中,如果指定了过大的padding值,那么按钮本身也会变大! 所以,最好使用margin(外边距)属性来控制界面布局中控件之间的边距。
c) 引入按钮单击事件的响应函数:把.xml与.java文件联系起来。
d) 开启Android Studio中的Auto Import功能:可以自动在写代码的时候引入相关的Java Package,提高开发效率。
e) 实现更新队伍得分的逻辑:推荐先写一写伪代码,理清思路再动手写代码,往往比想清楚之前直接coding更有效率(虽然这样的结论看起来有些反直觉)。
做完了以上的步骤,我们得到了Team A的计分板界面,在Android Studio中的界面预览如图1所示,在手机上运行的效果如图2所示。

图1. Android Studio界面A的Preview

图2. Team A的界面
f) 增加另一个队伍Team B之后的界面,用到了嵌套视图组来实现,要是想不清楚如何嵌套,可以先画画层级关系的树状图。新增的Team B的界面在层级关系上与Team A的界面是兄弟关系(siblings)。

图3. Preview增加Team B的界面

图4. 增加Team B的界面

图5. 增加Team A、B的比分
g) 重置记分牌:在界面底部居中的位置,增加一个重置记分牌的比分的按钮,需要再次嵌套视图组。从View Groups层级关系上来讲,这里的Button所在的视图组与前Team A、B的视图组也是兄弟关系(siblings)。
h) 美化界面:通过直接在XML中指定16进制的颜色值,增加Team A、B的分隔线,调整padding与margin,修改使用的字体等方法,来美化之前的界面。由于我手机的API Level 为19,无法运行界面美化后的程序,这里只放出界面Preview。

图6. 美化计分板界面

图7. 调整分隔线的长度
2C课程笔记分享_StudyJams_2017的更多相关文章
- 1C课程笔记分享_StudyJams_2017
课程1C 概述 课程1C是创建一个生日贺卡应用的实践课程,所以本篇笔记分享主要记录个人的实践过程,此外分享一些比较零散的知识点. Drawable文件夹 Drawable文件夹是Android项目统一 ...
- 1A课程笔记分享_StudyJams_2017
1A课程 概述 课程1A主要讲解了Android UI的三种基本控件:TextView.ImageView以及Button.笔记的主体内容主要根据课程内容的讲解顺序来组织,此外我对一些个人比较感兴趣的 ...
- 1B课程笔记分享_StudyJams_2017
课程1B 概述 课程1B主要讲解了Android UI的ViewGroups(视图组).LinearLayout(线性布局).RelativeLayout(相对布局),Portrait Mode(竖屏 ...
- 3A课程笔记分享_StudyJams_2017
课程3A-面向对象编程(上) 概述 面向对象的思想在当今的软件开发中占据着主导地位. Java是一门完全面向对象的语言,是一种天然的分布式互联网软件的开发语言,在当今企业级应用中占据绝对领先地位,也是 ...
- 2B课程笔记分享_StudyJams_2017
课程2B-创建交互式应用(下) 概述 课程2B的内容主要包括:使用变量来更新欲显示在屏幕上的内容,为按钮添加事件响应(联系XML属性与Java方法)逻辑等. 后续的课程会逐步深入地讲解使用Java开发 ...
- 2A课程笔记分享_StudyJams_2017
课程2A 概述 课程2A.2B的内容主要是关于创建交互式应用的基础知识.之前的L1课程主要是Android UI的基础设计知识,基本上没涉及到编程. 2A的讲解主要包括:使用变量来更新欲显示在屏幕上的 ...
- 3B课程笔记分享_StudyJams_2017
昨晚才发现 Study Jams China的官方论坛也支持MarkDown,所以直接发在了那上面.http://www.studyjamscn.com/thread-21807-1-1.html
- L4课程_Firebase_笔记分享_StudyJams_2017
最近才发现Study Jams China的官方论坛也支持MarkDown,所以就直接把笔记发在了那儿. http://www.studyjamscn.com/thread-21855-1-1.htm ...
- 深度学习课程笔记(一)CNN 卷积神经网络
深度学习课程笔记(一)CNN 解析篇 相关资料来自:http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17_2.html 首先提到 Why CNN for I ...
随机推荐
- 【JAVA】简陋的学生信息管理系统
因为之前写了一个学生信息管理系统,但还是处于命令行界面,不美观,于是打算做一个完整的界面出来. 在网上查阅资料后发现C++本身是不支持图形化界面的(可以使用第三方的Qt来做) 权衡之下还是选择了JAV ...
- PHP常用系统设置整理
1.设置时间脚本执行时间 set_time_limit(0); 2.设置最大执行内存 ini_set('memory_limit','1024M');//设置内存 memory_get_usage() ...
- BZOJ 2501 [usaco2010 Oct]Soda Machine
[题意概述] 给出一个[0,1,000,000,000]的整数数轴,刚开始每个位置都为0,有n个区间加操作,最后询问数轴上最大的数是多少. [题解] 我写的是离散化后线段树维护区间最值. 其实貌似不用 ...
- C. Vladik and Memorable Trip DP
C. Vladik and Memorable Trip time limit per test 2 seconds memory limit per test 256 megabytes input ...
- Openfire:解决乱码问题
当部署openfire后,创建用户和发送离线消息时会出现中文字符乱码的问题.要解决这个问题需要同时配置openfire和mysql两端. 首先openfire端,在安装页面中指定odbc连接串中需要带 ...
- Android 开发 ContentProvider 获取歌曲列表和联系人的样例
ContentProvider(内容提供者)是Android中的四大组件之中的一个. 主要用于对外共享数据.也就是通过ContentProvider把应用中的数据共享给其它应用訪问.其它应用能够通过C ...
- linux下华为HSPA模块MU609的驱动问题
环境: CPU: s3c2416 Linux: 3.6 模块: HUAWEI MU609 SIM卡: 移动3G卡.移动4G卡 首先,拿到MU609模块后,第一要做的是对模块进行一些熟悉与了解,那么资料 ...
- 一篇文章贯穿ACE各种发送接收组件 1.2版
TCP通信过程介绍 首先介绍一下socket通信的基本过程:这里先如果有两个家伙在通信,一个是S.还有一个叫C (1)S打开port监听本地的port看看有没有人来连接: (2)与此同一时候C试图去连 ...
- android graphic(15)—fence
为何须要fence fence怎样使用 软件实现的opengl 硬件实现的opengl 上层使用canvas画图 上层使用opengl画图 下层合成 updateTexImage doComposeS ...
- Linux下RTC时间的读写分析【转】
本文转载自:http://blog.csdn.net/little_walt/article/details/52880840 Linux系统下包含两个时间:系统时间和RTC时间. 系统时间:是由主芯 ...