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 ...
随机推荐
- Scrapy下载器中间件用法示例
1.爬虫文件httpbin.py # -*- coding: utf-8 -*- import scrapy class HttpbinSpider(scrapy.Spider): name = 'h ...
- vue 底部bottomnav
<template> <div id="foot"> <div class="tabBar"> <div class= ...
- [poj1698]Alice's Chance[网络流]
[转]原文:http://blog.csdn.net/wangjian8006/article/details/7926040 题目大意:爱丽丝要拍电影,有n部电影,规定爱丽丝每部电影在每个礼拜只有固 ...
- 这书真的不错--Spring MVC Beginner's Guide
五百多页,我干到三百多页了. 每个知识点都有说明,操作,解释. 学SPRING MVC,有它就够了. 遗憾的是,这个PDF的文档格式太稀松啦,且,无中文版~~~ 我都想作汉化翻译工作了...算了,忍住 ...
- gradle配置国内的镜像
gradle配置国内的镜像 学习了:http://blog.csdn.net/stdupanda/article/details/72724181 http://blog.csdn.net/lj402 ...
- SSH整合开发时Scope为默认时现象与原理
1.前提知识 1)scope默认值 进行SSH整合开发时,Struts2的action须要用spring容器进行管理,仅仅要涉及到类以bean的形式入到spring容器中.无论是xml配置还是使用注解 ...
- [RxJS] Get current value out of Subject (BehaviorSubject)
When you want to get the current value of a subject, you need to switch BehaviorSubject, it always e ...
- Java类集-list
Collection 子接口: ArrayList是List 接口和Collection接口的一个子类,用于实例化两种接口 package leiji; import java.util.ArrayL ...
- Android将图像转换成流存储与将流转换成图像
1.将图片转换成二进制流 public byte[] getBitmapByte(Bitmap bitmap){ ByteArrayOutputStream out = new ByteArrayOu ...
- 蓝牙调试工具hcitool的使用实例【转】
本文转载自:http://blog.csdn.net/kangear/article/details/37961769 这个工具据说是基于BlueZ的,但是Android4.2以后不再采用BlueZ取 ...