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 ...
随机推荐
- (C/C++学习)9.C/C++优化排序
说明:在C/C++中常见的排序方法有两种,第一种为选择排序法,第二种为冒泡排序法,本文将对这两种排序法进行优化,并给出一种更为快捷的排序法. 一.未优化的排序法 现在假如要对一个数组进行排序,假设这个 ...
- THUSC2019 退役记
Day -inf 这一个半月潜心搞文化课,把文化课的坑填上了不少,我文化课的底子真是薄啊 一年前没想过我还挺有希望进队的,最后还差点冲上 一年后说不定会发现我搞文化课也能搞得不错呢? 一切都是未知 t ...
- ORM 事务
orm 事务: import datetime from appxx import models try: from django.db import transaction with transac ...
- 第八节:numpy之四则运算与逻辑运算
- 20170622-编译Uboot错误
参照:http://docs.widora.io/zh/uboot编译 Assembler messages:Error: unknown architecture `4kc' Error: unre ...
- STM32窗口看门狗和独立看门狗的区别,看门狗介绍及代码演示
一.介绍: STM32看门狗分为独立看门狗和窗口看门狗两种,其两者使用调条件如下所示, IWDG和WWDG两者特点如下图所示: 独立看门狗的手册资料: 窗口看门狗的手册资料: ...
- 1.4.1 安装Python扩展库
Python之所以得到各行业领域工程师.策划师以及管理人员的青睐,与涉及各行业各领域开发的扩展库也有很大关系,不仅数量众多.功能强大,关键是用起来很方便.虽然Python标准库已经拥有了非常强大的功能 ...
- android 数据存储之SQLite
使用嵌入式关系型SQLite数据库存储数据 除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据. 在Android平台上,集成了一个嵌入式关系型数据 ...
- Navicat premium连接Oracle报ORA-12545错误
1:ORA-12545 原因: 这里填localhost,127.0.0.1,或者远程ip.
- Django——6 模型基础ORM 数据库连接配置 模型的创建与映射 数据的增删改查
Django Django的ORM简介 数据库连接配置 模型的创建与映射 数据库的增删改查 增数据 查数据及补充 改数据 删数据 Django的ORM系统分析 ORM概念:对象关系映射(Objec ...