1A课程

概述

课程1A主要讲解了Android UI的三种基本控件:TextView、ImageView以及Button。笔记的主体内容主要根据课程内容的讲解顺序来组织,此外我对一些个人比较感兴趣的内容作了一些扩展的说明。希望我的分享能对大家有所帮助。

TextView

  • 设置TextView中的字体大小,推荐使用dp(Density-Independent,(像素)密度无关)作为像素单位,这样能够使字体大小与屏幕像素密度无关。即显示字体时会根据当前屏幕的像素密度来调整字体实际占据的像素数,像素密度越大的,占据的像素数相应也越大。这样做的最大的好处在于能够保证不同设备(具有不同像素密度的平板、手机、电脑等)上的字体的实际大不会改变,使得开发人员不必为了不同的设备编写不同的代码。
  • sp(Scale-Independent,缩放无关)与dp的唯一区别在于:使用sp作为单位指定的字体大小,会使用户的字体尺寸大小("大"、"中"、"小")设置无效。如果你不想让字体大小受到用户设置的影响的话,那么就可以用sp作为像素的单位。
  • 设置width、height属性,一般情况下都用wrap_content作为width、height的属性值,使得TextView自适应文本的宽度和高度,免去了手动指定宽高度的麻烦。
  • [提示1] 关于字体选取,使用1-3种比较美观的字体即可,如果UI使用的字体太多,很有可能的后果就是用户招架不住,视觉上感到很疲劳。
  • [提示2] 考虑TextAppearance属性的使用。为了在不同设备间保持界面外观的一致性,可以使用Android预定义好的TextAppearance属性的值。
    • 代码示例
      android:textAppearance="?android:textAppearanceLarge"
      android:textAppearance="?android:textAppearanceMedium"
      android:textAppearance="?android:textAppearanceSmall"

XML

  • 课程1A中只是简单提到了几个XML的语法,包括标签(tag)、自封闭(self-closing)标签、属性(attribute)等等。只要跟随课程进度走,勤加练习,掌握XML的基本语法应该是水到渠成的。

以下是我想分享的、关于XML的更多内容

  • [定义] 可扩展标记语言,它被设计用来传输和存储数据,其焦点是数据的内容。

  • [比较] XML与HTML(超文本标记语言)的对比:

    |   语言  | 设计思路                    | 角色定位                       |
    | :-----| :-----------------------| :------------------------- |
    | HTML| 用来显示数据,关注的是数据的**外观** | 对于XML,具有不可替代性 |
    | XML | 用来传输和存储数据,关注的是是数据的**内容**| 对HTML的补充 |

            XML与HTML都是标准通用标记语言的子集。

  • [XML的应用&个人理解]

    • XML的应用非常广泛,可以用来描述Android UI的(我认为,实际上就是符合Android规范的、与用户界面相关的结构化数据);可以用来描述软件项目的结构。比如:JavaEE项目中的web.xml、Visual Studio C/C++项目的*.vcxproj(虽然文件扩展名不是xml,但这里的扩展名只是一件"外衣"罢了,用任何一个文本编辑器打开该文件,从内容上来,用到的语言就是XML)等等都是项目配置文件。
    • 如果足够熟悉的话,你可以通过直接编辑这些xml文件来更改项目属性来达到同样的效果,避免在可视化界面中进行一系列繁琐的操作。进一步地,你可以把一个与具体IDE(集成开发环境,课程1A有简单的介绍,可以对照 Android for All术语表 来了解)相关的Preferences(首选项、用户偏好)项目配置文件迁移到一个新建的项目,省去重新设置用户偏好的麻烦。这个办法在Eclipse中特别方便实用。
    • 我个人认为,之所以XML广泛用于UI布局文件、项目配置文件的编写,很大程度上是因为XML本身就是被设计来存储和传输结构化数据的;而前述的这些文件恰恰就是需要维护一些UI相关或项目相关的结构化信息的。

ImageView

  • 属性src指定图像来源(绝对路径、相对路径均可),layout_width、layout_height指定了该控件的宽高。
  • 属性scaleType通常的取值可以有center和centerCrop。 centerCrop可以达到full-bleed显示的效果,大多数情况下都比较美观,所以裁剪(crop-off)是可以接受的。

![Fig1. centerCrop_cake的显示效果](http://images2015.cnblogs.com/blog/1161127/201705/1161127-20170507070509054-121512628.png)
**图1.** centerCrop_cake的显示效果


![Fig2. center_cake的显示效果](http://images2015.cnblogs.com/blog/1161127/201705/1161127-20170507070352601-989666601.png)
**图2.** center_cake的显示效果

可以看到centerCrop在这里是更合适的属性取值。

实用的学习实践资料

1A课程笔记分享_StudyJams_2017的更多相关文章

  1. 1C课程笔记分享_StudyJams_2017

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

  2. 1B课程笔记分享_StudyJams_2017

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

  3. 3A课程笔记分享_StudyJams_2017

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

  4. 2C课程笔记分享_StudyJams_2017

    课程2C-实践:创建交互式应用 概述 课程2C的内容主要是练习巩固2A.2B中讲解的内容,并设计实现一款篮球比赛的计分板应用及其界面的美化. Warm-Up:准备活动 新建项目PracticeSet2 ...

  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. POJ 2356 && POJ 3370 鸽巢原理

    POJ 2356: 题目大意: 给定n个数,希望在这n个数中找到一些数的和是n的倍数,输出任意一种数的序列,找不到则输出0 这里首先要确定这道题的解是必然存在的 利用一个 sum[i]保存前 i 个数 ...

  2. Codeforces Round #240 (Div. 2) C Mashmokh and Numbers

    , a2, ..., an such that his boss will score exactly k points. Also Mashmokh can't memorize too huge ...

  3. java中split以。点和|分割的问题

    问题:想要按照点来切分字符串直接这样 String[] filep=filename.split("."); 结果得到一个空数组 解决方法: 法一:需要转义,改为:(注意是2个\\ ...

  4. Linux查看设备信息命令

    系统 #查看内核/操作系统/CPU信息 uname -a #查看操作系统版本 head -n 1 /etc/issue #查看CPU信息 cat /proc/cpuinfo #查看计算机名 hostn ...

  5. WPS for Linux字体配置(Ubuntu 16.04)

    错误提示: 解决方法: 从http://bbs.wps.cn/thread-22355435-1-1.html下载字体库,离线版本:(链接: https://pan.baidu.com/s/1i5dz ...

  6. Maven使用GitHub项目目录搭建远程仓库

    使用GtiHub的项目目录搭建第三方远程仓库,能免除使用服务器搭建Nexus私服,而且空间也是免费的.但是这种方式只适合小规模发布,毕竟搜索和版本控制是一个问题,如果需要更复杂的功能就只能转向Nexu ...

  7. python_swift_project_middleware

    1. 写openstack swift的middleware 首先要确定swift用的是哪个middleware文件. 比如healthcheck这个中间件,在机器上有很多同名文件如下, 这两行可能是 ...

  8. java NPE就是空指针异常,null pointer exception

    java NPE就是空指针异常,null pointer exception

  9. 创建.m文件一片空白的错误解决方式

    今天写代码,想继承一个类,突然发现创建的类文件一片空白,如图 之后各种调试发现都解决不了问题,以为是装了xcode6 beta2 版本号的问题,结果发现事实上是我创建错了 我创建的是 watermar ...

  10. Image图片处理

    public class Imager { #region 正方型裁剪并缩放 /// <summary> /// 正方型裁剪 /// 以图片中心为轴心,截取正方型,然后等比缩放 /// 用 ...