《HTML5移动开发》—— 2.1 HTML5语法

本节书摘来异步社区《HTML5移动开发》一书中的第2章,第2.1节,作者:【美】Estelle Weyl(埃斯特尔 韦尔),更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.1 HTML5语法

HTML5与HTML4与XHTML非常类似。后两者支持的大部分元素在HTML5中仍然是支持的。只有一些过时了的标记和属性已被剔除。在大多数情况下,如果你的文档能通过HTML4严格(Strict)模式或是XHTML模式的验证,那么它们作为HTML也能通过验证[1]。HTML和XHTML的语法虽略有不同,但是两者都被支持。仅仅把HTML 4.01或XHTML的doctype改成,就可以通过HTML5验证(稍后将介绍更多有关doctype的内容)。

HTML5比HTML4和XHTML更好,包含了之前版本的元素,剔除了已过时的元素,添加了一些新元素,还重新定义或微调了另外一些元素。

HTML5规范的编写者调查了Web上那些开发者们已经在做的:哪些文档分段是各种网站都趋向的,他们都赋给这些组件哪些类(class)和ID,哪些脚本是大多数的网站作者反复使用的,以及哪些类库功能已经激增至普遍存在。

HTML5试图处理那些个人开发者们一直自行在做的:创建一个标准;详细说明浏览器都应该如何处理这些标准;以及当他们的代码,呃,不那么标准的时候,浏览器应该如何处理开发人员标记。HTML5规范明确细化了浏览器应该如何处理,或解析,各种代码正确或错误的情况。通过关注细节,HTML5的一个目标就是告诉浏览器如何处理所有可能会发生的情况,从而浏览器可以从同样的标记构造出一致的DOM,这样开发人员就不会一直把带宽浪费在处理浏览器差异上了。

从我个人而言,我乐于见到更严格的标准。我的观点是开发者们应该正确地编写代码,而不是指望浏览器从宽解析糟糕的代码。你正在读这本书,所以我假定你是“良好代码”阵营的一员。很好!这就是你要学的东西。

2.1.1 元素

Web页面是由一系列元素组成的。有些元素是空的,其他的元素则包含文本,而另一些可以包含其他元素(或者既有元素也有文本)。大多数元素可以包含子元素或文本节点。那些不能包含子元素的,例如图像和meta元素,称为空元素(empty element)。

如图2-1所示,一个元素就是一个结构体,由一个开始标记、一些可选的(有时是必需的)属性、通常还有一些内容,以及一个结束标记,而且如果你使用XHTML风格编写代码的话,还有一个专门针对像<img><input>这样空元素自闭合标记的可选的斜杠组成。

b90812128cbfaaa734b2f248b24c8eca7e24a12f

在HTML之前版本的中,内联元素(inline element)只能包含其他内联元素和文本。根据元素的不同,块级元素(block-level element)可以包含其他块级元素、内联元素和(或)文本。它们的“后代”元素(descendant element),像“祖先”元素(ancestor element)一样,也可以由元素、属性和文本组成。

使用CSS,你可以把任何短语元素[2](phrase element)的样子更改成块(block)显示,还可以强制一个块元素或区块元素(sectioning element)显示成内联的样子(注意:我仍然在使用内联这个词。在HTML5中,内联指的是外在表现,而不是指元素类型)。
在HTML5中,我们终于从内联元素还是块元素的观念中解脱出来了——基于外观的命名约定。在HTML5中,元素被定义为区段元素、标题(heading)元素、短语元素、嵌入式(embedded)元素、流(flow)元素、元数据(metadata)元素以及交互式(interactive)元素。不过在语义上,一些观念还是保持不变的。举例来说,区段元素不能位于短语元素内部。

在选择一个元素时,要基于语义选择最恰当的元素,而不要基于默认的浏览器渲染。虽然你确实可以针对不管什么文体上的目的而使用任意元素,但你不应该这样做。每一个元素都有语义上的含义。

2.1.2 属性

所有的元素都可以有属性。有些元素有必需的属性。有关属性的一个例子是元素的href属性,如图2-1所示。属性是典型的键/值对(name/value pair),尽管布尔属性的值是可选的[3]。属性为渲染引擎提供了有关元素的附加信息,并且都位于开始标记中,而不在结束标记中。

有几个属性对于几乎所有HTML5元素来说是全局的(global)——包括核心(或全局)属性和国际化(internationalization)属性(将在下一节中介绍)——以及另一些更加元素特有的属性,这些我们将在第3章当讲到这些属性正在被修改的元素时进行介绍。

2.1.3 全局属性和国际化属性

HTML5已经添加了几个国际化属性和核心属性,这些属性可以被应用到几乎任何元素上。

id、class、title、style、lang和dir属性继续在所有元素上被支持。HTML5往核心属性列表中添加了accesskey、hidden和tabindex属性,同时还有contenteditable、contextmenu、spellcheck、draggable和dropzone共5个建议性的交互式属性。随后将讨论这些属性。

除了全局属性,所有的元素也可以有微数据(microdata)属性(WIA-ARIA角色和aria-属性)和自定义数据属性。自定义数据属性是你自己的属性,写成data-的形式,这里的由你自己设置。HTML5通过添加data-前缀以允许开发者们创建不会与未来的HTML版本冲突的属性。我们将在“data-自定义数据属性”小节描述data-属性,在第6章介绍微数据和ARIA无障碍属性。

id
id属性是一个唯一标识符。每个文档不应该存在具有相同id的两个元素,并且每个元素最多也只能有一个id。在HTML5中,id的值必须至少一个字符长,而且不能包含空格。这与之前的版本有所不同,之前版本id的值必须以字母A-Z或a-z开始,后面可以跟字母(A-Za-z)、数字(0-9)、连字符(-)、下划线(_)、冒号(:)和句号(.)。

我建议你把id限制于仅使用字母和数字,然而无论你选择使用哪种命名约定,重要的是保持统一。
id属性一般是可选的。不过,对于内部页面锚点(anchoring)和正在实现显式标签(explicit label)的表单内部元素是必需的。通过使用标签的for属性和表单元素的id属性可以把显式标签和表单元素关联起来。要注意的是,对于嵌套在一个隐式标签(implicit label)之内的表单元素,id属性不是必需的。我们将在第4章讨论标签和id属性。

id属性作为一个锚点用于使用JavaScript进行定位也非常方便,只是可能有一点重度使用。id属性,如果有被包含的话,可以用在CSS中定位元素。然而,由于id在CSS样式中的高量值或特征性,即使id选择器用起来稍微更好一些,id值也应该尽量少在CSS选择器中使用。所有这些我们将在第6章讨论。现在你只要知道,在你读完这本书的时候,你将能意识到你可以使用CSS3选择器定位到页面中的任何元素,而不需要使用id选择器就够了。

class
class是该元素所属的一个类别的名字或一些类别的列表。class属性具体说明了该元素是哪一个或哪一些类的一员。和id属性不同,任何数量的元素都可以共用同一个类。一个元素可以有多个使用空格分开的类。

就CSS样式而言,class属性中类名的顺序无关紧要。然而在样式表(stylesheet)中的顺序,却很重要(这个问题我们将在第6章进行讨论):

<a href= " http://google.com " class="external popup search">link text</a>
title```
title属性为它应用到的任意元素提供了一种人工可读的描述。title属性在有些可视浏览器上经常被实现为一个“工具提示”(tooltip),但是其他浏览器,尤其是移动浏览器,不会显示该title属性。虽然屏幕阅读器可以设置成支持title属性,但是大部分屏幕阅读器不会把title属性的值作为默认设置进行读取,因此在提高可访问性方面不能依赖title属性。
 

title属性对于有些元素来说是必需的,例如<abbr>;对<abbr>来讲,其title属性的值就是其缩略语的扩展。除此之外的title属性一般是可选的。
然而title属性作为一个链接、图像、框架和多媒体元素的属性时还是有用的,它可以作为一种能根据用户交互显示一些零散隐藏信息的方法被派上用场。举例来说,我们可以使用CSS提取title属性的内容,然后通过把title的值作为通过::before或::after伪元素(pseudoelement)生成的内容的一部分,就可以为“工具提示”弹出式窗口创建生成的内容。

虽然title属性的值可用于渐进式增强(progressive enhancement)的漂亮花招(trick),但是因为这种花招的非可访问本质,我们不应该依赖于它来提供重要信息。而且因为用户能够访问到它,因此只能在title的内容是有用而且适合的时候才能使用title。如果你为了让你的统计可用而往title属性中添加内容,或者添加供你的JavaScript使用的代码,不要这样做!随着自定义数据属性(我们将在“data-自定义数据属性”小节介绍)的加入,rel属性和title属性巧妙的滥用已经没有必要(而且根本不适合)。

style
style属性可以让你指定某一元素只会出现一次的样式规则。该属性在快速原型设计的时候可以派上用场。除了原型设计之外,应该都不需要使用该属性,因为Web标准规定内容应该与呈现分离。

另外还要注意,当在像Safari和Chrome的Web Inspector、Firefox的Firebug、Opera的Dragaonfly、IE的F1这样的工具中使用检查器来查看代码时,使用JavaScript或者通过调试器接口添加的样式,将作为style属性的值内联出现。这是动态地生成的。浏览器可以这么做。但你最好不要!

lang
lang属性是两个全局的国际化属性之一(dir是另外一个)。一个Web页面的首要语言使用<html>元素的lang属性,通过HTTP头的Content-Language或http-equiv="language"属性进行设置。用于国际化或者定义内容的非默认语言区块时,lang属性详细说明了该元素属性值及其内容的语言种类,包括它所包含的那些没有给自己指定lang属性的所有元素。

lang属性使得搜索引擎能够按内容的语言种类编制索引,并允许屏幕阅读器使用国际发音规则。

lang属性使我们能够根据语言来样式化文本。<q>元素应该根据在lang属性中定义的语言来呈现恰当的引号,但这并没有被很好地支持。

dir
与lang属性经常一起使用,在书写阿拉伯语(Arabic)、希伯来语(Hebrew)或者其他自右向左的语言时,dir属性可以用于更改文本方向。dir属性的默认值是ltr(从左到右)。如果你的Web页面主要使用一门这种自右向左的语言,则在<html>元素中使用dir属性来设置主要的方向。

在页面正文里面,如果你有不是页面默认方向的内容,可以使用dir属性更改文本方向。虽然没有显式要求,但我还是建议无论何时你在一个元素上面包含了dir属性,同时也要包含title属性和lang属性。一般来讲,dir属性被用于把部分文本改成自右向左。包含lang属性是因为有必要通知搜索引擎、屏幕阅读器以及其他辅助技术该语言已经改变。title属性为你提供了一种方法,让你可以包含一份内容的翻译,使用你的网站的主要语言。这些属性提供了各种方法,不仅让你的网站内容对那些残障人士是可访问的,而且对你主要的“视觉障碍”用户Google也是可访问的!

注意,在HTML5中dir略有不同,现在已经引入了第三个值auto。这样dir属性可能的值就包括rtl、ltr和auto。

####2.1.4 成为HTML5核心的HTML 4属性
上面的属性都是之前版本(X)HTML的全局或核心属性,而且继续还是。还有两个在交互式元素上所支持的可访问性属性,现在HTML5中是全局属性。这些将在下面的小节中介绍。

tabindex
在以前的规范中,tabindex被包含在像链接和表单元素这样的交互式元素上,允许开发者们设置这些元素接收焦点的顺序。HTML5已经把tabindex的作用扩展至包括所有的HTML元素。

很多人使用鼠标浏览网站,点击链接和表单元素参与交互。其他人使用键盘浏览页面;点击Tab键就把焦点从一个可交互元素移动到了下一个。在非可触控手机上,用户使用导航或方向键盘(简称D-pad)上的4个方向来导航可聚焦元素。在智能机上,大多数用户通常会触控他们希望跟踪的链接或希望输入的表单元素。一旦他们已经在一个表单元素中完成输入,很多动态键盘都提供了“下一步”按钮供前进到下一个表单元素。默认情况下,只有链接和表单字段通过这种方式接收焦点。不管是通过导航键盘的向右按钮、下一步按钮还是Tab键,从当前元素到正在接收焦点的元素的顺序,就是源代码中表单元素的顺序,除非先天的顺序已经被使用tabindex属性篡改。

在HTML5中,tabindex属性的全局性质给所有元素添加了“可聚焦性”——而不仅是表单元素和链接。该属性把它的值看作是一个整数。当用户按下Tab键时,具有tabindex属性的元素将根据tabindex属性的数字值按顺序接收焦点——适合那些具有正值的tabindex。

不要使用带有正值的tabindex,除非你能够给页面上的每一个交互性元素都提供tabindex值,而且你还有很好的理由来重新排列这些顺序,并且你还要确保在该应用的整个“有生之年”你将都可以维护其正确的顺序。与此相反,我们应该使用正确的顺序来标记页面。Tab默认的顺序是与源代码中的顺序相同的。重新排列页面的Tab顺序可能会迷惑用户,从而可能导致非常糟糕的用户体验。最好以一种合理的顺序来布置页面,而且绝对不要使用tabindex属性。使用默认Tab(也就是源代码顺序)通常可以建立最佳用户体验。

所以,如果你不应该更改页面的顺序,那为什么tabindex成为一个全局变量了呢?tabindex属性成为全局性的目的是为了在所有元素上,包括非交互性上启用可编程的聚焦,一般是通过JavaScript或键盘焦点。

因为我们不希望真的更改源自页面源顺序的Tab或键盘焦点的顺序,所以tabindex的值只应该是0或−1。tabindex="-1"(任何负数值都起作用,不过−1是惯例)这样的值可被用于可编程聚焦;而tabindex="0"可被用于提供可访问性等方面的事由,假如你想要给一个链接或表单元素之外的元素提供键盘访问的同时又不更改页面的顺序的话。


你可能想知道,在通常不使用Tab进行导航的移动领域, tabindex能做什么。注意,你在填写一个表单元素的时候,有些设备上显示出来的键盘在顶部有一个“下一步”按钮。同样,就像在桌面环境上你希望通过JavaScript启用焦点一样,在手机上你可能也想这么做。并且,就像在桌面环境上一样,不是所有的用户都有一台指点设备(pointing device)[4]。许多视觉障碍人士在使用智能手机,尤其是在美国的iPhone。这样一来,tabindex就有助于可访问性。
accesskey
acesskey与tabindex类似,除了它不通过使用Tab按顺序导航到下一个具有更高tabindex值的元素进行页面导航,而是把焦点直接移动到触发访问键(activated access key)已经设置好的元素。可以把它看成是一个键盘快捷键。

acecsskey属性的值创建了键盘快捷键。例如,``<input acesskey="s"name= "search"type="text"/>`` 创建了一个accesskey等于s的搜索框。当用户按下字母“s”时,焦点就移到了搜索框。

accesskey属性的值是一个或多个使用一个空格分开的字符。通常情况下,它只是一个字符,但规范允许一个元素可以有不止一个键盘快捷键。accesskey值的语法与class属性类似,后者的属性的值是一个空格分开的标记(token)的有序集合。不过,这里的顺序是有意义的,第一个标记之后的标记被认为是为无法支持初始值的用户代理准备的回退方案。

虽然tabindex和acesskey最初都曾被视为可能解决可访问性问题的方案而备受推崇,但它们不是大家都盼望的可访问性解决方案。如前所述,tabindex由于修改页面原本正常的焦点顺序会产生糟糕的用户体验。类似地,accesskey可能会扰乱客户端浏览器设定的默认行为和快捷键。

迄今为止,我还未发现在智能手机上accesskey有什么用,但是因为我们正在学习HTML5,所以就把它包含进来了。accesskey在智能手机到来之前曾经很有用,那时在一个很小的旧手机上浏览网站是件苦差事。

####2.1.5 HTML5新内容:全局可访问性和交互性属性
HTML5包括若干新的属性,其中包括在本节介绍的一些新的全局属性。在接下来的两章,当我们讨论到一些元素的时候,将介绍这些元素特有的新的属性和值。

hidden
当含有hidden属性的时候,表示该元素尚未或者不再适用。支持的浏览器不会显示具有hidden属性,或在用户代理的样式表中定义了display:none;的元素。最好不要仅仅为了对用户隐藏元素而使用该属性,因为它是具有语义的:它表示围绕在该hidden属性的内容要么是已经过时的,要么是不再适用的。

contenteditable
contenteditable属性表示该元素是否是可编辑的。当包含该属性时,虽然用户对内容的更改并没有被保存,但的确修改了DOM,这样你就可以捕获这些更改并发回给服务器以保存。所有的桌面浏览器都支持contenteditable属性;随着Android 3.0和iOS 5.0开始提供支持,除了Opera Mini之外的所有移动设备也都支持该属性。

一旦设置了元素的contenteditable属性,触控设备上的动态键盘就应该弹开以启用编辑。

contextmenu
contextmenu属性使元素能够和一个提供了更多上下文相关信息的<menu>或<command>关联起来。该属性把你希望与之关联的<menu>元素的id的值作为它的值。除了Chrome试验性地提供支持之外,该属性尚未被其他任何浏览器所支持,因此本书并未涉及<menu>和<command>元素。

draggable
可拖动属性表示该元素是否是可拖动的。你也许已经注意到了,在大多数桌面浏览器上可以拖动图像,但无法放下。这就是目前默认的可拖动行为。为了使draggable属性变得确实有用,应该把它与JavaScript事件处理器结合起来使用,例如dragstart、drag、dragenter、dragleave、dragover、drop和dragend。除IE10之外的移动浏览器都不支持拖放,因此这些API没有包含在本书中。

dropzone
拖动一个元素是一回事,但是拖完之后你要做什么呢?HTML5提供了一个dropzone属性,可以指定在一个元素上可放下什么类型的内容。你可以使用move、copy和link属性值,分别移动、拷贝原来被拖动的内容或为其创建一个链接。因为移动浏览器没有对拖放提供很好的支持,所以我们在本书中不会对其进行进一步讨论。

spellcheck
spellcheck属性表示一个元素是否要进行拼写和语法检查。默认情况下,大多数  智能手机和平板电脑会在输入的时候自动更正(autocorrect)文本区域,但并不总是很  好——有几个拿“更正”寻开心的网站。虽然它们不支持spellcheck属性,但它们的确支持自动更正。

有趣的是,虽然iOS的默认行为是自动更正文本,但如果autocorrect属性被添加到一个文本类型输入,它实际上不检查拼写;它只会在没有包含这个属性的时候才自动更正。

ARIA无障碍属性
HTML5支持无障碍富Internet应用(ARIA)可访问性模块的role和aria-*属性。ARIA是一个单独的模块,而不是HTML5规范的一部分。使用实时区域(live region)、角色以及ARIA状态和属性,WAI-ARIA能够帮助提高动态更新内容和被劫持(hijacked)元素的易访问性。

当与富Internet应用程序交互时,使用屏幕阅读器访问的用户,可能正在让页面的一部分大声地朗读出来,同时页面的另一部分正被动态更新。ARIA实时区域可以帮助向用户表明页面其中的一部分 ——当前没有获得焦点的那部分 ——已经更新了。使用arialive的assertive、polite或默认的off值,ARIA为网站作者提供了一种方法,可以暂停屏幕阅读器,并通知用户页面的一部分已经被更新。相关的属性包括aria-atomic、aria-busy和aria-relevant。

ARIA的role属性可以在改变用途的元素上创建一个语义化结构。举例来说,其用途改变为一个grid、listbox、menu、menubar、tablist、toolbar、tree或treegrid的元素都可以认定为是这样的元素。使这看似非语义化的标记变得易于访问、可用,以及可以跟辅助技术互操作。虽然屏幕阅读器对新的HTML元素(参见第3章)的完全支持可能会使一些ARIA结构角色不再适用,但是现在就给页面添加role的article、application、banner、complementary、contentinfo、document、form、heading、main、navigation和search值可以帮助支持ARIA但尚不支持HTML5的屏幕阅读器。

关于角色需要注意的两个问题是:(1)一旦设置之后,role不应该被动态更改,因为这将会扰乱辅助技术;(2)角色优先于元素的默认语义。

除了role属性和它的很多值之外,ARIA 还为状态和属性提供了相关属性。状态属性有aria-disabled、aria-busy、aria-expanded和aria-hidden,有关属性的属性有aria-describedby、aria-haspopup和aria-labelled,这些属性在动态部件(widget)和改变用途的元素上提供了附加信息。最好的作法是针对任务使用语义最符合的现有元素,但是当你针对一个无法预期的用途(例如一个树状菜单)无论如何必须使用一个特定的元素时,应该使用ARIA。

data-自定义数据属性
在HTML5中,你可以创建自己的属性。虽然之前也可以创建自己的属性,但是标记不会通过验证。HTML5引入了自定义数据属性,这样的话,作为作者的你,可以自己定义这些属性的名称。

为了给用户交互提供数据,开发者们一直在编写无效的属性和滥用title和rel属性。仅仅使用data-前缀创建一个属性,代码就可以通过验证,而不是误用像rel和title这样的HTML4属性。

例如,在我们的CubeeDoo游戏中,我们需要维护每一张卡片的值和位置,这样当我们对它们进行比较时,我们就能够知道第一张翻开的卡片是否与第二张翻开的卡片一致,而且在我们暂停游戏以及离开屏幕时,还需要和localStorage结合来维护状态。我们可以在JavaScript中使用数组的方式来记住每一张卡片。相反地,我们在代码中创建了data- position和data-value属性,可以为每一局新游戏的设定动态地更新data-的值:
<div id="board" class="level1">
    <div data-value="0" data-position="1">
        <div class="face"></div>
        <div class="back"></div>
    </div>
    <div data-value="0" data-position="2">
        <div class="face"></div>
        <div class="back"></div>
    </div>
    <div data-value="0" data-position="3">
        <div class="face"></div>
        <div class="back"></div>
    </div>
    <div data-value="0" data-position="4">
        <div class="face"></div>
        <div class="back"></div>
    </div>
    ...
    <div data-value="0" data-position="24">
        <div class="face"></div>
        <div class="back"></div>
    </div>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内容简介   《Android开发入门与实战》内容上涵盖了用Android开发的大部分场景,从Android基础介绍、环境搭建、SDK介绍、Market使用,到应用剖析、组件介绍、实例演示等方面。从技术实现上,讲解了5个Android平台下的完整综合实例及源代码分析,分别是RSS阅读器、基于Google Map的个人GPS、豆瓣网(Web 2.0)客户端、在线音乐播放器、手机信息查看助手。《Android开发入门与实战》注重对实际动手能力的指导,在遵循技术研发知识体系的严密性同时,在容易产生错误、不易理解的环节配以了翔实的开发情景截图,并将重要的知识点和开发技巧以“小实验”、“小提醒”、“小知识”、“注意”等的活泼形式呈现给读者。在程序实例的讲解方面,主要将实例安插在Android开发的精髓知识章节,这为初学者学习与实践结合提供了很好的指导。《Android开发入门与实战》配套有400多分钟的全程开发视频光盘,指导读者快速、无障碍地学通Android实战开发技术。《Android开发入门与实战》适合具备一定软件开发经验,想快速进入Android开发领域的程序员;具备一些手机开发经验的开发者和Android开发爱好者学习用书;也适合作为相关培训学校的Android培训教材。 目录 第1章 掀起你的盖头来——初识Android 1.1 认识Android 1.2 Android的背景 1.2.1 Android的历史 1.2.2 Android的发展 1.3 我的Android我做主 1.3.1 开发基于Android平台的应用 1.3.2 参加Android开发者大赛 1.3.3 个人英雄主义再现——得到更多人的认可和尊重 1.3.4 获得应有的收益——AndroidMarket 1.4 真实体验——Android模拟器 1.4.1 模拟器概述 1.4.2 模拟器和真机的区别 1.4.3 模拟器使用注意事项 1.5 更上一层楼——加入Android开发社区 1.6 本章小结 第2章 工欲善其事 必先利其器——搭建Android开发环境 2.1 开发Android应用前的准备 2.1.1 Android开发系统要求 2.1.2 Android软件开发包 2.1.3 其他注意事项 2.2 Windows开发环境搭建 2.2.1 JDK、Eclipse、AndroidSDK软件安装 2.2.2 SDK的家在哪里——设定AndroidSDKHome 2.2.3 真的准备好了吗——开发环境验证 2.2.4 创建Android虚拟设备(AVD) 2.3 Linux一族——Ubuntu开发环境搭建 2.3.1 Java、Eclipse和ADT插件安装 2.3.2 设定AndroidSDKHome 2.4 MacOS一族——苹果开发环境搭建 2.5 本章小结 第3章 清点可用资本——AndroidSDK介绍 3.1 AndroidSDK基础 3.2 深入探寻AndroidSDK的密码 3.2.1 AndroidSDK目录结构 3.2.2 android.jar及内部结构 3.2.3 SDK文档及阅读技巧 3.2.4 先来热热身——AndroidSDK例子解析 3.2.5 SDK提供的工具介绍 3.3 Android典型包分析 3.3.1 开发的基石——AndroidAPI核心开发包介绍 3.3.2 拓展开发外延——Android可选API介绍 3.4 本章小结 第4章 赚钱的市场——AndroidMarket及应用发布 4.1 GoogleMarket产生背景与目的 4.2 体验“选货”的乐趣——在G1上体验Market的使用 4.3 Android开发活动及特色应用 4.3.1 开发应用的领域 4.3.2 AndroidMarket特色应用一览 4.4 你也可以做东家——申请Market账号 4.4.1 卖东西要先入伙——准备工作 4.4.2 入伙过程——申请 4.5 开张了——在Market上发布应用 4.5.1 发布时可能遇到的错误 4.5.2 卖东西也要签名——生成签名文件 4.5.3 打包、签名、发布应用 4.6 本章小结 第5章 千里之行始于足下——第一个应用HelloWorld 5.1 HelloWorld应用分析 5.1.1 新建一个Android工程 5.1.2 填写工程的信息 5.1.3 编程实现 5.1.4 运行项目 5.2 调试项目 5.2.1 设置断点 5.2.2 Debug项目 5.2.3 断点调试 5.3 本章小结 第6章 磨刀不误砍柴工——Android应用程序结构介绍 6.1 Android体系结构介绍 6.1.1 应用程序(Application) 6.1.2 应用程序框架(ApplicationFramework) 6.1.3 库(Libraries)和运行环境(RunTime) 6.2 Android应用程序组成 6.2.1 Activity介绍 6.2.2 BroadcastIntentReceiver介绍 6.2.3 Service介绍 6.2.4 ContentProvider介绍 6.3 Android应用工程文件组成 6.4 本章小结 第7章 良好的学习开端——Android基本组件介绍 7.1 第一印象很重要——界面UI元素介绍 7.1.1 视图组件(View) 7.1.2 视图容器组件(Viewgroup) 7.1.3 布局组件(Layout) 7.1.4 布局参数(LayoutParams) 7.2 我的美丽我做主——Android中应用界面布局 7.2.1 实例操作演示 7.2.2 实例编程实现 7.3 不积跬步无以至千里——常用widget组件介绍 7.3.1 创建widget组件实例 7.3.2 按钮(Button)介绍与应用 7.3.3 文本框(TextView)介绍与应用 7.3.4 编辑框(EditText)介绍与应用 7.3.5 多项选择(CheckBox)介绍与应用 7.3.6 单项选择(RadioGroup)介绍与应用 7.3.7 下拉列表(Spinner)介绍与应用 7.3.8 自动完成文本(AutoCompleteTextView) 7.3.9 日期选择器(DatePicker)介绍与应用 7.3.10 时间选择器(TimePicker)介绍与应用 7.3.11 滚动视图(ScrollView)介绍与应用 7.3.12 进度条(ProgressBar)介绍与应用 7.3.13 拖动条(SeekBar)介绍与应用 7.3.14 评分组件(RatingBar)介绍与应用 7.3.15 图片视图(ImageView)介绍与应用 7.3.16 图片按钮(ImageButton)介绍与应用 7.3.17 切换图片(ImageSwitcher&Gallery) 7.3.18 网格视图(GridView)介绍与应用 7.3.19 标签(Tab)介绍与应用 7.4 友好的菜单——menu介绍与实例 7.4.1 实例操作演示 7.4.2 实例编程实现 7.5 Android应用的灵魂——Intent和Activity介绍与实例 7.5.1 实例操作演示 7.5.2 实例编程实现 7.6 用好列表,做好程序——列表(ListView)介绍与实例 7.6.1 实例程序演示 7.6.2 实例编程实现 7.7 友好地互动交流——对话框(Dialog)介绍与实例 7.8 温馨的提醒——Toast和Notification应用 7.8.1 实例操作演示 7.8.2 实例编程实现 7.9 本章小结 第8章 移动信息仓库——Android的数据存储操作 8.1 Android数据存储概述 8.2 轻轻地我保护——SharedPreferences存储 8.3 谁的文件,谁主宰——文件存储 8.4 打造自己的数据库存储——SQLite存储方式 8.4.1 Android中对数据库操作 8.4.2 完整地操作数据库——日记本实例 8.5 我的数据你来用——ContentProvider介绍 8.5.1 初识ContentProvider 8.5.2 使用ContentProvider读取系统数据 8.5.3 使用ContentProvider操作数据日记本实例 8.6 再学一招——网络存储 8.7 本章小结 第9章 我来“广播”你的“意图”——Intent和Broadcast面对面 9.1 Android应用程序的核心——Intent 9.1.1 Intent基础 9.1.2 用Intent启动一个新的Activity 9.1.3 Intent详细讲解 9.1.4 Android解析Intent实现 9.2 用广播告诉你——利用Intent来广播(BroadCast)事件 9.2.1 实现Android中的广播事件 9.2.2 BroadCastReceiver介绍 9.3 应用实例详解 9.3.1 程序操作演示 9.3.2 实例编程实现 9.4 本章小结 第10章 一切为用户服务——Service应用实例 10.1 认识Service 10.2 使用Service 10.3 Service的生命周期 10.4 实例学习Service 10.4.1 精彩实例一——定时提醒 10.4.2 精彩实例二——音乐播放器 10.5 本章小结 第11章 循序渐进——开发Android应用的基本步骤 11.1 兵马未动粮草先行——应用规划及架构设计 11.2 应用开发步骤 11.2.1 界面设计始终是第一位——实现UI 11.2.2 必备的动力源泉——数据操作和存储 11.2.3 华丽转身——实现多页面跳转 11.2.4 始终为用户做好服务——增加Service 11.2.5 细节决定成败——完善应用细节 11.3 成功就在眼前——应用测试和发布 11.3.1只欠东风——应用测试 11.3.2 可以赚钱了——发布到AndroidMarket 11.4 本章小结 第12章 Android综合案例一——RSS阅读器实例 12.1 RSS介绍 12.1.1 RSS基础 12.1.2 RSS的历史 12.1.3 RSS语法介绍 12.2 SAX介绍 12.2.1 SAX基础 12.2.2 使用SAX的作用 12.2.3 怎样使用SAX 12.3 RSS阅读器设计 12.3.1 RSS阅读器功能设计 12.3.2 RSS阅读器UI和交互流程设计 12.4 RSS阅读器的实现 12.4.1 程序实体解析 12.4.2 实现一个自己的ContentHandler 12.4.3 Activity的实现 12.5 本章小结 第13章 Android综合案例二——基于GoogleMap开发个人移动地图 13.1 项目UI规划 13.2 数据存储实现 13.2.1 设计数据库及表结构 13.2.2 设计SharePreference存储 13.3 项目实现流程 13.3.1 创建项目工程 13.3.2 项目各功能及界面实现 13.3.3 实现数据存取 13.3.4 实现Service 13.3.5 应用流程整体实现 13.3.6 后续开发完善 13.4 项目程序演示 13.5 项目程序签名、打包和发布 13.6 本章小结 第14章 Android综合案例三——基于Android的豆瓣网(Web2.0)移动客户端开发 14.1 关于豆瓣网和豆瓣网API 14.1.1 豆瓣网介绍 14.1.2 豆瓣网API介绍 14.1.3 豆瓣网API认证 14.1.4 豆瓣网API快速入门 14.1.5 豆瓣网APIJava库介绍 14.2 豆瓣网(Web2.0)客户端设计 14.2.1 客户端功能规划设计 14.2.2 UI和交互流程设计 14.2.3 数据存储设计 14.3 豆瓣网(Web2.0)客户端实现 14.3.1 申请APIKey 14.3.2 Activity实现 14.4 本章小结 第15章 Android综合案例四——在线音乐播放器 15.1 关于YOBO和YOBOAPI 15.1.1 YOBO简介 15.1.2 YOBO功能特点 15.1.3 YOBOAPI介绍 15.2 在线播放器架构设计 15.2.1 在线播放器功能规划设计 15.2.2 在线播放器UI设计 15.2.3 在线播放器数据存储设计 15.3 在线播放器的编程实现 15.3.1 申请APIKey 15.3.2 基础功能实现 15.3.3 实现Activity 15.3.4 实现Service 15.3.5 后续开发展望 15.4 在线音乐播放器应用演示 15.5 在线音乐播放器应用打包、签名和发布 15.6 本章小结 第16章 Android综合案例五——手机信息查看助手 16.1 手机信息查看助手功能规划和可行性分析 16.1.1 手机信息查看助手功能规划 16.1.2 手机信息查看助手可行性分析 16.2 手机信息查看助手功能实现 16.2.1 手机信息查看助手主界面 16.2.2 查看系统信息实现 16.2.3 查看硬件信息 16.2.4 查看软件信息 16.2.5 获取运行时信息 16.2.6 文件浏览器 16.2.7 项目的细节完善 16.3 手机信息查看助手功能展望 16.4 项目的打包、签名和发布 16.5 本章小结 第17章 芝麻开门——Android底层开发和移植概述 17.1 Android原始码下载 17.2 实机测试 17.2.1 NeoFreeRunner介绍 17.2.2 烧录androidfs.jffs2 17.3 Android移植技术概论 17.3.1 Android底层技术的重要性 17.3.2 Android移植项目介绍 17.3.3 Android的技术优点 ·收起全部<< 前言   随着3G的到来,无线带宽越来越高,使得更多内容丰富的应用程序布置在手机上成为可能,如视频通话、视频点播、移动互联网冲浪、在线看书/听歌、内容分享等。为了承载这些数据应用及快速部署,手机功能将会越来越智能,越来越开放,为了实现这些需求,必须有一个好的开发平台来支持,在此由Google公司发起的OHA联盟走在了业界的前列,2007年11月推出了开放的Android平台,任何公司及个人都可以免费获取到源代码及开发SDK。由于其开放性和优异性,Android平台得到了业界广泛的支持,其中包括各大手机厂商和著名的移动运营商等。继2008年9月第一款基于Android平台的手机G1发布之后,预计三星、摩托罗拉、索爱、LG、华为等公司都将推出自Gflg~Android平台的手机,中国移动也将联合各手机厂商共同推出基于Android平台的OPhone。按目前的发展态势,我们有理由相信,Android平台能够在短时间内跻身智能手机开发平台的前列。   由于Android平台被推出的时间才一年左右,了解Android平台软件开发技术的程序员还不多,如何迅速地推广和普及Android平台软件开发技术,让越来越多的人参与到Android应用的开发中,是整个产业链都在关注的一个话题。本书作者较早就从事Android的研究与开发工作,为了帮助开发者更快地进入Android开发行列,他们不辞辛劳地编写了Android开发教程-《Google Android开发入门与实战》。本书系统讲解了Android软件开发的基础知识,图文并茂地帮助读者学习和掌握SDK、开发流程以及常用的API等。书中以讲述实战实例为导向,用一个个典型应用生动地引领读者进行项目开发实践。作为一本既及时、又翔实、理论实践相结合的教程,《Google Android开发入门与实战》一书很值得入门者阅读。   值得一提的是,书中的开发实例很有创意,将传统互联网的内容/服务与移动平台紧密结合起来,如书中的豆瓣网客户端、在线音乐播放器等应用,都体现了移动互联网应用所需的创新精神及良好的用户体验理念,这个设计思路很值得大家去思考和学习。   最后,祝广大开发者的技术日益精进,早日开始Android开发之旅,赶上移动互联网的第一班车,共赢中国3G未来!
我要挣钱(http://www.51zhengqian.net)编辑 目录 第1章 掀起你的盖头来——初识Android 1.1 认识Android 1.2 Android的背景 1.2.1 Android的历史 1.2.2 Android的发展 1.3 我的Android我做主 1.3.1 开发基于Android平台的应用 1.3.2 参加Android开发者大赛 1.3.3 个人英雄主义再现——得到更多人的认可和尊重 1.3.4 获得应有的收益——AndroidMarket 1.4 真实体验——Android模拟器 1.4.1 模拟器概述 1.4.2 模拟器和真机的区别 1.4.3 模拟器使用注意事项 1.5 更上一层楼——加入Android开发社区 1.6 本章小结 第2章 工欲善其事 必先利其器——搭建Android开发环境 2.1 开发Android应用前的准备 2.1.1 Android开发系统要求 2.1.2 Android软件开发包 2.1.3 其他注意事项 2.2 Windows开发环境搭建 2.2.1 JDK、Eclipse、AndroidSDK软件安装 2.2.2 SDK的家在哪里——设定AndroidSDKHome 2.2.3 真的准备好了吗——开发环境验证 2.2.4 创建Android虚拟设备(AVD) 2.3 Linux一族——Ubuntu开发环境搭建 2.3.1 Java、Eclipse和ADT插件安装 2.3.2 设定AndroidSDKHome 2.4 MacOS一族——苹果开发环境搭建 2.5 本章小结 第3章 清点可用资本——AndroidSDK介绍 3.1 AndroidSDK基础 3.2 深入探寻AndroidSDK的密码 3.2.1 AndroidSDK目录结构 3.2.2 android.jar及内部结构 3.2.3 SDK文档及阅读技巧 3.2.4 先来热热身——AndroidSDK例子解析 3.2.5 SDK提供的工具介绍 3.3 Android典型包分析 3.3.1 开发的基石——AndroidAPI核心开发包介绍 3.3.2 拓展开发外延——Android可选API介绍 3.4 本章小结 第4章 赚钱的市场——AndroidMarket及应用发布 4.1 GoogleMarket产生背景与目的 4.2 体验“选货”的乐趣——在G1上体验Market的使用 4.3 Android开发活动及特色应用 4.3.1 开发应用的领域 4.3.2 AndroidMarket特色应用一览 4.4 你也可以做东家——申请Market账号 4.4.1 卖东西要先入伙——准备工作 4.4.2 入伙过程——申请 4.5 开张了——在Market上发布应用 4.5.1 发布时可能遇到的错误 4.5.2 卖东西也要签名——生成签名文件 4.5.3 打包、签名、发布应用 4.6 本章小结 第5章 千里之行始于足下——第一个应用HelloWorld 5.1 HelloWorld应用分析 5.1.1 新建一个Android工程 5.1.2 填写工程的信息 5.1.3 编程实现 5.1.4 运行项目 5.2 调试项目 5.2.1 设置断点 5.2.2 Debug项目 5.2.3 断点调试 5.3 本章小结 第6章 磨刀不误砍柴工——Android应用程序结构介绍 6.1 Android体系结构介绍 6.1.1 应用程序(Application) 6.1.2 应用程序框架(ApplicationFramework) 6.1.3 库(Libraries)和运行环境(RunTime) 6.2 Android应用程序组成 6.2.1 Activity介绍 6.2.2 BroadcastIntentReceiver介绍 6.2.3 Service介绍 6.2.4 ContentProvider介绍 6.3 Android应用工程文件组成 6.4 本章小结 第7章 良好的学习开端——Android基本组件介绍 7.1 第一印象很重要——界面UI元素介绍 7.1.1 视图组件(View) 7.1.2 视图容器组件(Viewgroup) 7.1.3 布局组件(Layout) 7.1.4 布局参数(LayoutParams) 7.2 我的美丽我做主——Android中应用界面布局 7.2.1 实例操作演示 7.2.2 实例编程实现 7.3 不积跬步无以至千里——常用widget组件介绍 7.3.1 创建widget组件实例 7.3.2 按钮(Button)介绍与应用 7.3.3 文本框(TextView)介绍与应用 7.3.4 编辑框(EditText)介绍与应用 7.3.5 多项选择(CheckBox)介绍与

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值