课程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的更多相关文章

  1. 1C课程笔记分享_StudyJams_2017

    课程1C 概述 课程1C是创建一个生日贺卡应用的实践课程,所以本篇笔记分享主要记录个人的实践过程,此外分享一些比较零散的知识点. Drawable文件夹 Drawable文件夹是Android项目统一 ...

  2. 1A课程笔记分享_StudyJams_2017

    1A课程 概述 课程1A主要讲解了Android UI的三种基本控件:TextView.ImageView以及Button.笔记的主体内容主要根据课程内容的讲解顺序来组织,此外我对一些个人比较感兴趣的 ...

  3. 1B课程笔记分享_StudyJams_2017

    课程1B 概述 课程1B主要讲解了Android UI的ViewGroups(视图组).LinearLayout(线性布局).RelativeLayout(相对布局),Portrait Mode(竖屏 ...

  4. 3A课程笔记分享_StudyJams_2017

    课程3A-面向对象编程(上) 概述 面向对象的思想在当今的软件开发中占据着主导地位. Java是一门完全面向对象的语言,是一种天然的分布式互联网软件的开发语言,在当今企业级应用中占据绝对领先地位,也是 ...

  5. 2B课程笔记分享_StudyJams_2017

    课程2B-创建交互式应用(下) 概述 课程2B的内容主要包括:使用变量来更新欲显示在屏幕上的内容,为按钮添加事件响应(联系XML属性与Java方法)逻辑等. 后续的课程会逐步深入地讲解使用Java开发 ...

  6. 2A课程笔记分享_StudyJams_2017

    课程2A 概述 课程2A.2B的内容主要是关于创建交互式应用的基础知识.之前的L1课程主要是Android UI的基础设计知识,基本上没涉及到编程. 2A的讲解主要包括:使用变量来更新欲显示在屏幕上的 ...

  7. 3B课程笔记分享_StudyJams_2017

    昨晚才发现 Study Jams China的官方论坛也支持MarkDown,所以直接发在了那上面.http://www.studyjamscn.com/thread-21807-1-1.html

  8. L4课程_Firebase_笔记分享_StudyJams_2017

    最近才发现Study Jams China的官方论坛也支持MarkDown,所以就直接把笔记发在了那儿. http://www.studyjamscn.com/thread-21855-1-1.htm ...

  9. 深度学习课程笔记(一)CNN 卷积神经网络

    深度学习课程笔记(一)CNN 解析篇 相关资料来自:http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17_2.html 首先提到 Why CNN for I ...

随机推荐

  1. 熟悉RHEL7登录界面使用

    Linux操作系统提供了图像界面和字符界面两种操作环境. 图像界面: 1.开启RHEL7后进入到该界面,图中用户是我们创建的本地用户,如果我们要以管理员身份登录则点击Not listed(未列出). ...

  2. 2019-02-13 Python爬虫问题 NotImplementedError: Only the following pseudo-classes are implemented: nth-of-type.

    soup=BeautifulSoup(html.text,'lxml') #data=soup.select('body > div.main > div.ctr > div > ...

  3. 编译Openwrt的log

    Openwrt配置: Target System (Ralink RT288x/RT3xxx) ---> Subtarget (MT7688 based boards) ---> Targ ...

  4. WEB 移动端 CSS3动画性能 优化

    很多时候,我们在开发移动端的时候要使自己的网页兼容不同的机型,很多时候会采用CSS3动画,但是很多时候在安卓机下,动画明显会出现卡顿,很难看,那么这里我介绍几个CSS 属性进行硬件加速那么就会得到明显 ...

  5. 【codeforces 766E】Mahmoud and a xor trip

    [题目链接]:http://codeforces.com/contest/766/problem/E [题意] 定义树上任意两点之间的距离为这条简单路径上经过的点; 那些点上的权值的所有异或; 求任意 ...

  6. 1、ceph-deploy之部署ceph集群

    环境说明 server:3台虚拟机,挂载卷/dev/vdb 10G 系统:centos7.2 ceph版本:luminous repo: 公网-http://download.ceph.com,htt ...

  7. 清北学堂模拟赛d6t3 反击数

    分析:显然是一道数位dp题,不过需要一些奇怪的姿势.常规的数位dp能统计出一个区间内满足条件的数的个数,可是我们要求第k个,怎么办呢?转化为经典的二分问题,我们二分当前数的大小,看它是第几大的,就可以 ...

  8. hdu 3064

    1:前n项和公式:1+2+3+...+n = n*(n+1)/2 2:前n项平方和公式:1^2+2^2+.........+n^2=n*(n+1)*(2n+1)/6 #include<stdio ...

  9. Spring Boot静态资源处理

    Spring Boot静态资源处理 8.8 Spring Boot静态资源处理 当使用Spring Boot来开发一个完整的系统时,我们往往需要用到前端页面,这就不可或缺地需要访问到静态资源,比如图片 ...

  10. [cogs461] [网络流24题#10] 餐巾 [网络流,最小费用最大流]

    建图:从源点向第一层连边,第一层表示当天用掉多少餐巾,第二层表示当天需要多少餐巾,所以注意购买餐巾的边容量为无穷大,要从源点开始连向第二层的点,每天可能有剩余,在第一层内表示为流入第二天的节点.具体见 ...