1 入门:投身新领域
1.Android的组成
1.1 布局-Layout
布局(Layout)定义各个屏幕是什么样的
典型的Android应用往往由一个或多个屏幕组成。可以使用布局来定义外观,也就是定义各个屏幕看上去是什么样。布局通常由XML定义,可能包含一些GUI组件,如按钮、文本域和标签。
布局告诉Android:你的应用的屏幕分别是什么样的。
1.2 活动-activity
布局只定义了应用的外观。还要编写Java代码来定义应用应当做些什么。有一种特殊的Java类,称为活动(activity),活动会决定要使用哪个布局,并告诉应用如何对用户做出响应。举个例子,如果布局中包含一个按钮,就需要在活动中写Java代码来定义按下这个按钮时要做些什么。
活动定义应用应该做什么。
1.3 额外的资源
除了Java代码和布局,Android应用通常还需要额外的资源,如图像文件和应用数据。可以为应用增加你需要的任何额外的文件。
Android应用实际上就是某些目录中的一组文件。构建应用时,所有这些文件会“捆绑”在一起构成一个应用在你的设备上运行。
资源可能包括声音和图像文件。
2.Android平台剖析
Android平台由很多不同的组件构成,包括一些核心应用(如 通讯录),一组API以及大量支持文件和库,这些API可以帮助你控制应用外的外观和行为。
- 应用:Android提供了一组核心应用,如通讯录(Contacts),日历(Calendar),地图(Maps)以及浏览器
- 应用框架:构建你的应用时,同样可以使用核心应用所用的API。可以使用这些API控制你的应用的外观和行为。
- 库:应用框架底层有一组C和C++库。可以通过框架API访问这些库
- Android运行时环境:提供了一组核心库,实现了Java编程语言的大部分功能。所有Android都在自己单独的进程中运行。
- Linux内核:最底层是Linux内核。Android依赖这个内核提供驱动以及核心服务(如安全和内存管理)。
3.Android SDK
Android设备并不会运行.class和.jar文件。实际上,为了提高速度和电池性能,Android设备会使用自己的优化格式表示编译代码。因此,不能使用常规的Java开发环境,还需要特殊的工具将你的编译代码转换成另一种Andorid格式,还要把他们部署到一个Android设备上,以便应用运行后进行调试。
所有这些都将作为Android SDK的一部分。下面来看看包括什么。
Android软件开发包(Software Development Kit,SDK)包含开发Android应用所需的库和工具:
4.Android项目知识点
> 项目创建是在电子书的N50
4.1 API层次
在Android Studio中创建项目时,需要选择一个Minimum SDK,指的是API层次。一般选择API层次为API 15,这说明它能够在大多数设备上运行。
Minimum SDK:最低SDK,是指你的应用支持的最低版本。应用将在有这个版本或更高版本API的设备上运行。如果设备的API版本比它低,你的应用就无法运行。
Android版本有一个版本号和一个代号。版本号提供了Android的准确版本(比如5.0),代号则是一个更为通用的“友好”的名字,可能涵盖多个Android版本(比如Lollipop)。API层次是指应用使用的API版本。举例来说,对应Android 5.0版本的API层次就是21。
4.2 活动和布局概览
所有Android应用都是由屏幕构成的一个集合,每个屏幕则由一个活动和一个布局组成。
<Android应用可以理解为一个或多个屏幕的叠加,通过返回键或者其他案件,实现屏幕的逻辑切换与显示>
活动是用户可以完成的一个确定的事情。比如,可能有一个活动要写emial,照相或者查找某个联系人。活动通常与一个屏幕关联,用Java编写。
布局描述了屏幕的外观。布局写为一个XML文件,它会告诉Android如何组织各个不同的屏幕元素。
下面来详细分析活动和布局如何共同创建一个用户界面:
- 设备启动你的应用,创建一个活动对象
- 这个活动对象指定一个布局
- 活动告诉Android在屏幕上显示这个布局
- 在设备上显示包含这个布局的用户界面
- 活动通过运行应用代码对交互做出相应
- 活动更新
- 用户将在设备上看到更新后的显示
4.3 Android项目在AS中的文件构成
4.4 在模拟器中运行应用
从AndroidStudio中运行应用,从Run之后发生了什么。
编译、打包、部署和运行
选择Run选项时并不只是运行你的应用。它还会处理运行应用所需的所有预备任务:
1.Java源文件编译为字节码
2.创建一个Android应用包或者APK文件,APK文件包含编译的Java文件以及应用所需的所有库和资源
3.假设模拟器还未运行,会启动模拟器并加载AVD
4.一旦启动模拟器并加载AVD,将APK文件上传到AVD并安装
5.AVD启动应该关联的主活动
4.5 运行HelloWorld应用发生的过程
运行应用时发生了:
1.AndoridStudio启动模拟器,加载AVD,并安装应用。
2.应用启动时,从MainActivity.java创建一个活动对象
3.这个活动指定它要使用布局activity_main.xml
4.活动告诉Android在屏幕上显示布局。另外会显示文本“HelloWorld”
问:提到创建一个APK文件时,java源代码会编译为字节码并且增加到APK。我想你是说,它会编译为Java字节码,是吧?
答:没错,不过还不止如此。在Android上情况稍有些不同。Android上最大的区别是你的代码并不真正在常规的Java虚拟机中运行。它会在Android运行时环境(Androidruntime,ART)中运行,如果在较老的设备上,则会在ART的前身Dalvik上运行。这说明,可以编写你的Java源代码,用Java编译器把它编译为.class文件,然后这些.class文件会集中到一个DEX格式的文件中,这是更简短、更高效的字节码。然后ART运行DEX代码。在Android中,每个应用都在自己的进程中运行。如果使用常规的JVM,就会需要更多的内存。
4.6 布局文件解析:把字符串值放在strings.xml中而不是硬编码写在代码中
首先来看自动生成的activity_main.xml布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world"/></RelativeLayout>
其他内容基本都知道了,来看点不知道的。在标签<TextView>中的text属性,可以直接选择硬编码的方式编写文本内容:
<TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World"/>
而是使用 上面的编写方式,下面来进行这么写的好处。
android:text="@string/hello_world"
第一部分:@string
告诉Android要从一个字符串资源文件查找文本值。此处,AndroidStudio为我们创建了一个字符串资源文件,名为 strings.xml,这个文件位于 app/src/main/res/values文件夹。
第二个部分 hello_world
表示Android要查找名为hello_wold的资源的值。
“@string/hello_world”表示 查找名为hello_world的字符串资源,并使用相关的文本值。
这么做的主要原因:本地化
假设你创建了一个应用,它可能成为Google Play Store上的一个热门应用。不过,你不希望仅限于某一个国家或语言,可能还想让它国际化,能适应很多不同的语言。
如果将文本值分开来放在strings.xml中,就可以使这些问题的处理容易得多。不必在各个不同的活动和布局文件中改变硬编码的文本值,完全可以把strings.xml文件替换为一个国际化的版本。
把strings.xml用作为维护文本值的一个集中的资源,还可以更容易地全局修改整个应用使用的文本。如果因为公司改名,你的老板要求改变应用中的文字,那么只需要修改strings.xml就可以了.
问:问:应用怎么知道要使用哪一个资源文件呢?
答:把默认的英语字符串资源文件正常放在app/src/main/res/values文件夹中,法语资源文件放在一个新的文件夹中,名为app/src/main/res/values-fr。如果设备设置为法语,它就会使用applsrclmainlres/values-fr文件夹中的字符串。如果设备设置为任何其他语言,则会使用applsrclmain/res/values中的字符串。
Android之所以能把strings.xml识别为一个字符串资源文件,存在关键的两点:
- 这个文件位于文件夹app/src/main/res/values中
这个文件夹中的XML包含简单之,如字符串和颜色。
- 这个文件有一个<resources>元素,它包含一个或多个<string>元素
文件本身的格式指示了这是一个包含字符串的资源文件。<resources>元素告诉Android这个文件包含资源,<string>元素则标识各个字符串资源。
这说明并不需要将你的字符串资源文件命名为strings.xml;如果愿意,完全可以取其他名字,或者还可以将这个文件拆分为多个文件。
每个名/值对有以下形式:
<string name="string_name">string_value</string>
此处的string_name是字符串的标识符,string_value是字符串值本身。
布局可以使用以下代码获取字符串的值:
5.知识点总结
- Android的版本包括版本号、APl层次和代号。
- Android Studio是IntelliJ IDEA的一个特殊版本,集成了Android软件开发包(AndroidSoftwareDevelopment Kit,SDK)和gradle构建系统。
- 典型的Android应用由活动、布局和资源文件组成。
- 布局描述了应用是什么样,位于app/src/main/res/layout文件夹。
- 活动描述了应用做什么,以及如何与用户交互。你写的活动放在app/src/main/java文件夹中。
- strings.xml包含字符串名/值对。这个文件用于将文本值与布局和活动相分离,从而支持本地化。
- AndroidManifest.xml包含有关应用自身的信息。这个文件位于app/src/main文件夹。
- AVD是一个Android虚拟设备。它运行在Android模拟器中,可以模仿真正的Android物理设备。
- APK是一个Android应用包。就像是对应Android应用的一个JAR文件,包含应用的字节码、库和资源。在设备上安装应用时就是要安装APK。
- Android应用使用Android运行时环境(ART)在单独的进程中运行。
- RelativeLayout用于将GUI组件放在布局的相对位置上。Textview元素用于显示文本。
1 入门:投身新领域相关推荐
- 用事实说话,我是如何快速入门一个新领域的
记得很久之前听罗胖的音频,讲到如何快速入门一个新领域,基本方法就是:集中火力,大量阅读该领域内相关书籍,最好阅读书籍涵盖该领域的正方和反方. 最近换了新工作,进入一个新领域--跨境支付,在实战中实践了 ...
- 关于快速学习一项新技术或新领域的一些个人思维习惯与思想总结
前言 本文尝试谈谈笔者对于学一项新技术.入门一个新领域的一些看法和方法.在本文会谈到一些思维习惯层面的.思想层面的内容,最后会给一个从零入门学习pytorch的方法作为例子. 写在前面的话 我写文章有 ...
- Cell | 小基因开启微生物组研究新领域——大规模鉴定微生物基因组编码的小蛋白质...
撰文 | 617 责编 | 兮 近年来,随着测序技术的发展,微生物组研究成为一个新热点.借助宏基因组测序技术,我们在人体的不同部位发现了多种多样的微生物,但是微生物究竟通过什么机制发挥作用影响表型呢? ...
- 史道术器|一种快速切入新领域的学习框架
今天分享一个鹅厂技术leader的成长心得,快速切入新领域的内功心法. 正文 11年正式入职以来,恰好赶上移动互联网叠加技术爆发的一个上升期:个人也跟着这个大趋势做了很多不同领域的学习和工作:大致可以 ...
- 蓝宝石b75主板支持服务器内存,入门主板新标杆 蓝宝石冰晶B75全解析
谁还考虑H61?蓝宝石冰晶B75袭来 作为一款专为中小企业.网吧和普通家庭用户量身打造的产品,B75最大的特色在于原生支持SATA 3.0和USB3.0.相对于上一代的H61.B65,无论在核心架构. ...
- 他入狱10年自学数学,如今凭借手稿发了篇论文,被同行评价“足以开辟数论新领域”...
杨净 梦晨 发自 凹非寺 量子位 报道 | 公众号 QbitAI 2010年,他因吸毒.杀人被捕入狱,被判有期徒刑25年. 在狱中,他靠自学数学打发时间. 没有计算机.没有老师,单靠手写.以及数学教材 ...
- 阿里巴巴云原生应用安全防护实践与 OpenKruise 的新领域
作者 | 王思宇(酒祝) 来源|阿里巴巴云原生公众号 得益于 Kubernetes 面向终态的理念,云原生架构天然具备高度自动化的能力.然而,面向终态的自动化是一把"双刃剑",它既 ...
- 通域消化内镜Android患者版,市中心医院消化内科Ⅰ病区开创超声内镜治疗新领域...
胃底静脉曲张常见于肝硬化患者,易反复出现消化道出血症状,严重时危及生命.由于大部分肝硬化患者肝功能储备和手术耐受性差,内镜下组织胶黏合剂注射治疗是常用治疗方法.但对于合并较大直径的分流道患者来说,组织 ...
- 英特尔大手笔花钱寻觅未来 但新领域变数太多难以成为支柱
在个人电脑多年下滑.智能手机处理器全面失败之后,英特尔已经成为一家没有未来可言的危险公司.在过去几年中,英特尔展开了频繁的收购,面向自动驾驶.汽车芯片.无人机.物联网等新领域布局,不过媒体注意到,这些 ...
最新文章
- elastic date时区问题解决办法
- C#中使用 SendMessage 向非顶端窗体发送组合键
- Codeforces Round #395 (Div. 2) - A
- PC如何接管手机的双因子身份验证 靠的是英特尔的CPU
- Android中shape的解析
- react使用link跳转传递参数_React-Typescript之路由跳转(使用this.props.history.push)
- android版 点击下载,自动点击器最新版
- 其他用户登陆到这台计算机,要登录到这台远程计算机,您必需拥有这台计算机上的‘终端服务器用户访问’权限解决方法...
- 设置java路径_关于java路径设置
- c++ static 关键字总结
- python logging打印终端_python standard package:logging
- Kali 更新失败 签名无效
- Android 属性动画 常用方法 与 插值器 Interpolator
- IntelliJ IDEA运行内存设置
- 子网掩码计算题与解析
- android 模拟器 派派,派派怎么在电脑上玩?派派电脑版使用教程
- 主Module(app)直接跳转到子Module,子Module跳转到主Module(app)要借助Router
- 浅析 PHP 官方自动化测试方法
- FineBI与FineReport对比 1
- msvcr120.dll丢失怎样修复?msvcr120.dll文件修复方法