@Sarah
2015-07-15T04:50:08.000000Z
字数 4740
阅读 1114
在我看来,安卓就是
1在android studio里用JAVA写出应用的逻辑
(各种函数调用无数个小类小函数,然后遇到这个怎么办,遇到那个又怎么办)
2用xml进行可视化,类似html一样,排版什么的
可以用android studio里的拖拽功能往虚拟机里拽,也可以在xml里自己写。需要用到绘图配色等艺术方面知识。
3通过一种神奇的机制,把上面两种东西联接起来(用id?)~砰~。手机里出现一个美丽的软件。
应用程序
Android系统是基于Linux内核开发,使用Java作编程语言,使界面到功能,都有层出不穷的变化,其中Activity等同于J2ME的MIDlet,一个Activity类别负责创建视窗,一个活动中的Activity就是在foreground(前景)模式,背景执行的程序叫做Service。两者之间透过由ServiceConnection和AIDL连结,达到复数程序同时执行的效果。如果执行中的Activity全部画面被其他Activity取代时,该Activity便被停止,甚至被系统清除。
View等同于J2ME的Displayable,程序人员可以透过View类别与“XML layout”档将UI放置在视窗上,并可以利用View打造出所谓的Widgets,其实Widget只是View的一种,所以可以使用xml来设计layout。至于ViewGroup是各种layout的基础抽象类别,ViewGroup之内还可以有ViewGroup。View的构造函数不需要在Activity中调用,但是Displayable的是必须的,在Activity中,要通过findViewById()来从XML中获取View,Android的View类的显示很大程度上是从XML中读取的。View与事件息息相关,两者之间透过Listener结合在一起,每一个View都可以注册event listener,例如:当View要处理用户触碰的事件时,就要向Android框架注册View.OnClickListener。另外还有Image等同于J2ME的BitMap。
编程语言[编辑]
Android是执行于Linux kernel之上,但并不是GNU/Linux。因为在一般GNU/Linux里支持的功能,Android大都没有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以bionic取代Glibc、以Skia取代Cairo、再以opencore取代FFmpeg等等。Android为了达到商业应用,必须移除被GNU GPL授权证所约束的部分,Android并没有用户层驱动(user space driver)这种东西。所有的驱动还是在内核空间中,并以HAL隔开版权问题。bionic/libc/kernel/ 并非标准的内核头文件(kernel header files)。Android的内核头文件是利用工具由Linux内核的头文件所产生的,这样做是为了保留常数、资料结构与宏。
Android的核心基于Linux,除了核心之外,则是中介层、数据库元和用C/C++编写的API以及应用程序框架。Android的应用程序通常以Java数据库元为基础编写,运行程序时,应用程序的代码会被实时转变为Dalvik dex-code(Dalvik Executable),然后Android操作系统通过使用实时编译的Dalvik虚拟机来将其运行。[95]
目前Android的Linux kernel控制包括安全、存储器管理、进程管理、网络堆叠、驱动程序模型等。下载Android源码之前,先要安装其构建工具Repo来初始化源码。Repo是Android用来辅助Git工作的一个工具。
res/ 资源(Resource)目录
「res」 目录中存放所有程序中用到的资源文件。"资源文件"指的是数据文件,或编译时会被转 换成程序一部分的 XML 描述文件。Android 针对放在 「res」 目录下的不同子目录的资源, 会有各自不同处理方式。因此我们写程序时,最好能搞清楚各目录下分别可放置的内容。
res/ 中的程序:
3. layout/ 版面配置(layout)目录 「layout」目录包含所有使用 XML 格式的接口描述文件。 「layout」 中的 XML 接口描述文件就像写网页时用到的 HTML 档案一样,用来描述屏幕上的 版面编排与使用的接口组件。XML 接口描述文件描述的内容可以是整张屏幕,也可以只描述一 部分的接口(例如描述用来产生对话框的接口组件)。
虽然你也能直接通过 Java 来建立用户接口,不过透过 XML 描述文件来建立用户接口相对更 简单,架构也更清晰,以后维护时更容易厘清问题。要使用这些接口组件,应透过 「R.java」 档 中自动产生的 「R」 类别来调用。
4. values/ 参数值(value)目录 「values」 目录包含所有使用 XML 格式的参数值描述档,可以 在此添加一些额外的资源如字符串(很常用)、颜色、风格等。使用时也是透过 「R」 类别来调 用。
「AndroidManifest.xml」 是 Android 程序的功能列表,应用程序在这里列出该程序所提供的功 能。当应用程序开启时,会提供诸如内容提供商(ContentProvider)、处理的数据类型、实际运行 的类别、跨应用程序的信息等等讯息。 你可以在此指定你的应用程序会使用到的服务(诸如电话 功能、网络功能、GPS 功能等)。 当你新增一个页面行为类别 (Activity) 时,你也需要先在此注 册这个新增的 Activity 类别后,才能顺利调用。
我们马上来学习 「main.xml」这个 XML 界面描述文件的内涵吧。
Android 平台里,用户接口都是透过 ViewGroup 或 View 类别来显示。ViewGroup 和 View 是 Android 平台上最基本的用户接口表达单元。我们可以透过程序直接呼叫的方法,调用描绘 用户接口,将屏幕上显示的接口元素,与构成应用程序主体的程序逻辑,混合在一起编写。或是, 也可以将接口显示与程序逻辑分离,照着 Android 提供的这个较优雅的方式,使用 XML 描述 文件,来描述接口组件的组织。
讲解
我们看到的「Hello World, Bmi」就包含在「main.xml」 这个档案中。 接着,我们就直接分部 份来讲解这个「main.xml」 档案里的内容:
第1行
XML (Extensible Markup Language) 是一种标记描述语言,不管是语法还是看起来的样子,都 相当类似网页所使用的 HTML 标记语言。XML 被广泛地运用在 Java 程序的设定中。 「main.xml」 文件里,第一行是每个 XML 描述档固定的开头内容,用来指示这个文本文件是 以 XML 格式描述的。
第 2, 6 与 12 行
xmlns:android="http://schemas.android.com/apk/res/android"> 接着我们看到第一个卷标,与 HTML 网页卷标相当类似。
"线性版面配置"(LinearLayout)卷标,使用了两个「LinearLayout」标签,来表示一个接口组件的 区块。后头的卷标前加上一个「/」符号来表示结束卷标。"线性版面配置" 所指的是包含在

「LinearLayout」 卷标中,所有组件的配置方式,是将一个接一个组件由上而下排队排下来的 意思。
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns 开头的这串叙述,是用来宣告这个 XML 描述档案的的名称空间(NameSpace),后面接 的 URL(网址),表示这个描述档案会参照到 Android 名称空间提供的定义。 所有 Android 版 面配置档案的最外层标签中,都必须包含这个属性。
注意标签需要两两对称。一个标签「
」在一串叙述的前头,另一个标签「
」在叙述的末尾。 如果你修改过的标签没有闭合(忘了加 <、/、> 等符号),Eclipse 画面上也 会出现小小的警示符号来提醒你。
第 3-5 行
这些包含在「
」卷标中的叙述被称为「LinearLayout」卷标的「属性」。Android 应用程序在 layout 目录中 的卷标,大多数的属性前都有一个「android:」前缀。同一个接口组件的属性之间,是以空白做 区隔,因此事实上你也能将多个属性写在同一行。当然,将属性排成多行更易于阅读。我们应该 保持这个好习惯。
接口组件都有许多共同的属性,例如接口组件的长,宽度设定属性。Android 接口组件的宽度、 长度设定属性分别叫做「android:layout_width」、「android:layout_height」。两个都设定为 「fill_parent」参数值。「fill_parent」 如其名,所表达的的意思就是"填满整个上层组件"。默认 LinearLayout 接口组件就会占满整个屏幕空间。
接口组件彼此间也会有一些不同的属性,例如 「LinearLayout」(线性版面配置) 卷标的 「android:orientation」(版面走向) 属性。在此填入 「vertical」 (垂直)属性值,表示这个接口 的版面配置方式是从上而下垂直地排列其内含的接口组件。
「android.view.ViewGroup」 是各种布局配置(layout)和视图(View)组件的基础类别。常见的实 现有
LinearLayout(线性版面配置)、FrameLayout(框架版面配置)、TableLayout(表格版面配置)、 AbsoluteLayout(绝对位置版面配置)、RelativeLayout(相对位置版面配置)等。
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"

虽然有这么多种版面配置方式可以选用,但大多数的应用程序并不需特地去改变默认的 LinearLayout 的配置,只要专注在其中填入需要的接口组件即可。所以从第 7 行之后的内容才 是一般应用程序开发时较常修改之处。
第 7 和 11 行
/>
TextView (文字检视)是我们看到的第一个熟悉的接口组件。其作用是显示文字到屏幕上。你可 能注意到这个标签结尾使用了 「/>」 符号。 「/>」符号表示这个 XML 叙述中没有内文,亦即 此接口组件描述中不再包含其他接口组件,也表示这个接口组件就是这个屏幕中最小的组成单元 了。
第 8-10 行
我们来看看 TextView 接口组件中包含了哪些属性。
「android: layout_width」和「android:layout_height」我们刚刚已经学过了,分别代表宽度跟长 度。「android: layout_width」 的 「fill_parent」 参数值表示宽度填满整个上层接口组件(即 LinearLayout 接口组件)。「android:layout_height」则是用上一个新的参数值「wrap_content」 (包住内容),亦即随着文字字段行数的不同而改变这个接口组件的高度。最后的 「android:text」 属性则是 TextView 接口组件的主要属性,亦即文字字段中显示的文字内容。至于 「@string/hello 」这段字符串所代表的意义,马上会接着在后面章节说明。我们现在已知道是: 只要将「android:text」属性内容替换成我们想要文字,在预览画面或在仿真器中就会显示对应 的文字。
将以上的 XML 描述综合起来,我们就可以得知「main.xml」 想表达的界面。