创建Toast通知

toast通知是一种跳出于屏幕表面的消息。它只占用信息所需的空间,用户当前的活动仍然是可见且能够操作的。该通知自动地淡入淡出,不接受交互事件。toast可以由后台服务创建,因此即使程序本身不可见,也能够被显示。

下面的截图展示了闹钟程序的toast通知示例。一旦闹钟被打开就会显示一条toast以确认其已经打开。toast可以在一个活动或是一个服务中被创建并显示。如果是从服务中创建了一个toast通知,它会出现在当前处于焦点的活动之前。

如果如要用户对通知进行相应的话,考虑使用状态条通知。

基本内容

首先,用某一makeText()方法来实例化一个Toast对象。该方法需要三个参数:程序Context,文本信息,和toast的持续时间。它将返回一个正确初始化的Toast对象。可以用show()来显示该toast通知,就像下面的范例那样:

该范例演示了大部分toast通知所需的各项内容。通常不会需要使用其他代码。不过,如果想要在其他位置显示toast或是要用自己的布局替换默认的简单文字消息的话,下一节中将描述如何实现。

还可以将方法连接起来以避免持有Toast对象,就像这样:

定位Toast通知

标准的toast通知出现在屏幕中下方。可以通过setGravity(int, int, tin)方法来改变位置。它接受三个参数:重力常量,X方向补偿和Y方向补偿。

例如,如果决定把toast置于左上角,可以这样设置重力:

如果想要把位置推到右侧,只需增加第二个参数的值。要向下移动,就增加最后一个参数的值。

创建自定义toast视图

如果不满足于简单的文本消息,还可以为toast通知创建一个自定义布局。要创建自定义布局,需要通过XML或是在程序代码内定义一个View布局,然后传递根View对象至setView(View)方法。

例如,可以通过以下的XML(保存为toast_layout.xml)创建出下面截图中的布局:

请注意,LinearLayout元素的ID是“toast_layout”。必须用这个ID从XML中解压出布局内容,就像这样:

首先,用getLayoutInflater()(或getSystemService())来检索,之后使用inflate(int, ViewGroup)将布局内容从XML中解压。其中第一个参数是布局资源ID,第二个参数是根View。可以在被解压的布局中找到其他的View对象,之后获取并定义ImageView和TextView元素的内容。最后,用Toast(Context)创建一个新的toast,设置其gravity和duration等属性。然后调用setView(View)将其传递给所解压的布局。现在就可以通过调用show()来显示自定义布局的toast了。

注意:除非要用setView(View)来定义布局,不然不要使用公有构造函数来构造Toast。如果没有可用的自定义布局,则必须要用makeText(Context, int, int)来创建Toast。

返回通知用户

本作品采用知识共享 署名-非商业性使用-禁止演绎 3.0 Unported许可协议进行许可。

通知用户

在不少情况下会需要通知用户程序当前发生的事件。一些事件需要用户回应,另一些则不需要。例如:

  • 当比如保存文件之类的事件完成时,应该出现一条信息确认保存成功。
  • 如果程序运行于后台,需要获取用户的注意时,程序应该创建一条通知让用户根据情况作出回应。
  • 如果程序正在执行需要用户等待的任务(比如读取文件),程序应该显示进度圈或是进度条。

以上每一种通知任务都是通过不同技术实现的:

  • Toast通知,用于来自后台的简单信息。
  • 状态条通知,用于来自后台需要用户回应的长期消息。
  • 对话框通知,用于和活动相关的通知。

本文综述了这些用以通知用户的技术,并包含了指向完整文档的链接。

Toast通知

toast通知是出现在窗口表层的弹出式信息。它只占用信息所需的空间,用户当前的活动仍然是可见且能够操作的。该通知自动地淡入淡出,不接受交互事件。toast可以由后台服务创建,因此即使程序本身不可见,也能够被显示。

toast最适合于确定用户正在关注屏幕时显示简短信息,例如“文件已保存”。toast不能接受用户交互事件;如果希望用户进行回应并作出操作的话,就要改用状态条通知。

更多信息,请参考“创建toast通知”。

状态条通知(Status Bar Notification)

状态条通知会向系统状态条添加一个图标(还可以附有文本消息)以及一条“通知”窗口内的可扩展消息。当用户选择了该可扩展消息,Android发出一个有通知定义的Intent(通常来启动一个活动)。也可以设置通知来以声音、振动和设备闪光来提醒用户。

这类通知适用于程序在后台服务中工作、需要通知用户某一事件时。如果需要在活动仍然处于焦点时提示用户某一事件的发生的话,考虑该用对话框通知比较好。

更多信息,参阅“创建状态条通知”。

对话框通知(Dialog Notification)

对话框通常是一个出现于当前活动前方的小窗口。下层的活动失去了焦点使得对话框将接受所有的用户交互操作。对话框常用作通知以及和程序执行过程直接相关的活动。

应当在需要显示一个进度条或有需要用户确认的简短消息(比如一个有“Ok”和“取消”按钮的提示)的情况下使用对话框。也可以将对话框作为程序UI的一个组成部分等其他非通知用途。要获取关于所有可用的对话框类型的完整讨论以及其使用方法,参阅“创建对话框”。

返回用户界面

本作品采用知识共享 署名-非商业性使用-禁止演绎 3.0 Unported许可协议进行许可。

索尼爱立信官方确认Xperia X10将升级至Android 2.3

X10 Gingerbread

今天索尼爱立信产品博客发布了新的文章,确认了其2010年Android旗舰机型将于今年Q2、Q3获得Android 2.3 (Ginglebread升级)。

以下是内容摘要(中文大意):

X10将在2011年Q2末、Q3初获得Android 2.3升级。

大部分版本将获得升级,但不是所有。

软件上将尽可能和2011的新机型保持一致,包括有索尼爱立信定制系统界面等。但是硬件限制的功能(比如HDMI输出)无法被支持。

一些现有的功能将不再被支持,尽管还没有最终确定,但以下功能可能被取消:

  • 摄像头的笑脸快门和人脸识别。同时摄像头界面将变为Android原生界面。
  • Moxier将被替换为2.3原生的EAS。
  • Mediascape将和2011年的新机型一样被简化为桌面插件。
  • DRM保护内容的密钥将在升级过程中丢失。
  • 索尼爱立信的备份和还原工具将无法使用。
  • 双方向语言(一些特殊国家地区的语言)将不再被支持。

只能通过PC升级。

升级后无法降级。

升级过程中设置和原有的内容将被删除。

X10 mini家族和X8不会得到升级。

在这次2.3升级后不会再有X10的升级。

本次升级是基于Android 2.3.3。

 

以上内容基于索尼爱立信产品博客内容翻译。

 

SONY 电子书籍 PRS-650 简单测评

SONY Reader

SONY Reader PRS-650 (图像版权属于 Sony Corporation, Sony Marketing (Japan) Inc.)

近年来电子书(或称电纸书)越来越多的走进了人们的视线。由于采用了被称为E-Ink的屏幕材料,使得近似于纸张的阅读体验和超长的电池续航时间得以实现。自己平时常要阅读各类电子格式书籍,不过笔电缺乏便携性、手机则是屏幕尺寸太小且电力消耗过快,加之这些采用液晶屏幕的产品都不适合长时间阅读,眼睛容易疲劳。因此,便考虑购入一台电子书。

由于比较注重外观设计,国产的电子书从一开始就没有被纳入考虑,于是需要在Amazon的Kindle和SONY的Reader之间选择。硬件上,相比Kindle,Reader具有一块光学式触摸屏,物理按键大幅减少,使得其操作感和Kindle有着较大的差别,作简单的手写笔记、简化选中操作等功能得以实现。主观上,一方面本来就是SONY的Fan,另一方面更喜欢Reader的外形。因此最终选择了后者。

之后要考虑到问题还有两个。Reader有日版和美版两种。日版分为5寸屏和6寸屏。美版则是还增加了有WIFI/3G功能的7寸屏版。不过作为补偿,日版每种型号各增加了一种色彩。除了硬件上的差异,美版和日版所使用的系统也有所不同。日版内建了ジーニアス英和辞典和New Oxford American Dictionary两本版权辞典,而美版则是内建了12本词典(不过具体是哪些辞典官网上并没有明确说明)。此外日本相比美版多支持了XMDF格式。这是一种专为日文书籍设计的电子书格式,主要特点是支持竖排文字的显示和处理。

经过考虑,决定购买日版6寸屏的PRS-650。

一周前从朋友处收到了帮忙代购的Reader,使用了几天后,在这里简单写一些使用感想。

硬件方面

机身的一些照片:

简单说明一下:Reader的机身边框采用了铝,相比塑料外壳的Kindle,质感非常好。正面的按键手感也不错,用的是类似于手机键盘的结构,按下所需要的力度也适中。背面则是磨砂设计,摩擦力也较大,因此拿在手中时有一种安心感。要说设计上的不足的话,也许就是冬天铝制外壳会有点凉了吧(笑)。

屏幕方面,和新版的Kindle一样使用的是E-Ink Pearl,在各种规格上都比前代产品有所提升。由于使用了光学式触摸屏,这次的PRS-650仍然存在着上一代产品中为人诟病的屏幕反光问题。不过相比PRS-600的严重反光,PRS-650的情况已经完全可以被接受。可以类比黑板,只要角度合适,就不会感觉到丝毫的反光,当出现反光现象时,通常改变屏幕角度5-10度即可完全消除。因此在实际使用的一周中,可以说这个问题完全没有对自己产生困扰。

触摸屏的反应很灵敏,也很精确。除了E-Ink屏幕本身对反应速度的限制外,可以说完全令人满意。机身右上方收纳了一支手写笔,当然因为采用的是光学式触摸屏,所以用手指也可以方便的操纵。

机身上方有电源开关/Hold键、MemoryStick插槽和SD卡插槽。机身下方则是MicroUSB接口、3.5mm耳机接口、音量调节按键以及Reset孔。电源开关和Hold键是同一个,因此采用了滑片式的结构。刚使用时感觉略有些紧,不过很快就能习惯。近年来索尼渐渐开始不再执着于自家的MemoryStick标准,所以越来越多的产品上出现了MemoryStick和SD卡双插槽。虽然对我来说感觉设计两个插槽并不是那么好的设计,不过一定程度上也确实增加了Reader的兼容性。图中灰色的物体是随机附赠的防尘用卡片。

机身下方的耳机插槽和音量键实际上基本没有怎么使用过。因为听音乐的话就势必会增加用电量,这样就和电子书引以为卖点的长使用时间相违。不过多了这样一个功能其实也并没有什么影响。音乐播放的效果很普通,没有过多可以评论的地方。

简单概括来说,Reader的外观设计继承了索尼一贯的风格,简约洗练。铝制外壳的手感很好,细节之处尽显人性化。采用了触摸屏是一大加分点。

软件方面

主菜单

主菜单分为三部分。从上至下依次为:继续上次的阅读、书籍列表、期刊/分类/笔记一览。继续上次的阅读顾名思义将打开上次阅读的书籍至上次退出的页面。书籍列表点击后会进入下面的视图:

可以按照多种方式(标题、作者等)显示、排列和搜索书籍,右侧还有快速定位条。除了缩略图模式外还有列表模式。这里不够人性化之处是即使是列表模式也只能同屏显示十条项目,在书籍数量很多时翻页会比较不便。当然在书籍很多时使用搜索功能可以说是一个办法,不过对此我自己的解决方案是给书籍添加分类。Reader的分类功能其实类似于其他地方常见的标签(Tag)功能,一本书可以添加多个分类。经过分类后查找书籍变得容易许多。

第三栏的期刊由于条件所限没有使用过,但应该只是一种内容的划分而已。分类功能中预设了未读书籍、未读期刊和已购入的书籍三项。可以方便地自己添加编辑新分类。此外由于“继续上次的阅读”功能仅会记忆最后一次阅读的书籍,如果是在多本书之间切换阅读的话,我的建议是增加一个“正在阅读的书籍”的分类,将最近在读的书籍添加进去。这点上,我想要是可以记忆最近阅读过的多本书籍的话会更为人性化。第三项的笔记一览则是总览并管理全部书籍中所做的笔记(分为书签、手写笔记和高亮划线三种)。

分类功能
分类功能

应用菜单

应用菜单也从上至下分为三部分,分别是:图片浏览、手写笔记、辞典/文字笔记/音乐。

图片浏览功能只是简单的浏览Reader中所保存的图片。手写笔记功能中可以新增、编辑、删除手写笔记。虽然E-Ink的反应速度还不够快使得笔迹会有约半秒的延后,但是作为应急用的笔记本是绰绰有余了。

辞书功能顾名思义是可以使用内建的两本辞典。Reader内建了日语和英语输入法,通过软键盘输入,不过两本辞书都是输入英语查询的。关于这点,我觉得如果能内建一本日语词典的话会更好。顺带一提,辞书还支持多次反查功能。文字笔记和手写笔记的不同之处在于它是通过软键盘输入文字作记录而非直接手写,支持日语和英语。音乐功能由于前述的理由,只在刚拿到手时试用过,之后就没有再用过。仅仅是一个简单的音乐播放器而已。不过可以一边阅读书籍时一边听音乐,在任何界面都可以调出菜单控制音乐播放。

辞典功能和软键盘
辞典功能和软键盘
辞典浏览模式
辞典浏览模式

设置菜单

设置菜单只有一些简单的设置功能和本体情报。这里就不熬述了。唯一值得一提的是,虽然有时间设定功能,但是每次连接Reader至电脑时都会自动更新Reader的时间————到东9区。尽管事实上没有任何影响,却还是不免感到不满。

软件方面最后要说的是,Reader的系统似乎只支持日语和英语,除此以外的语言不被支持,将显示为方块。所幸自己所读的内容都是日语和英语的,所以也没有太大的影响。由于这个原因,中文的TXT文件中会有很多字无法被显示,解决方案是将TXT转换为PDF格式。Microsoft Office Word之类的很多软件都可以很容易地做到这一点。

阅读效果

普通视图
普通视图
缩放以及阅读笔记
缩放以及阅读笔记
XMDF格式效果
XMDF格式效果

对于和屏幕比例不同的书籍,屏幕周围会留下灰色的边框。我觉得如果边框是白色的话也许会更好吧。对于ePub、TXT和XMDF格式的内容,可以设置六档字体缩放,已经完全可以满足所有人的需求了。对于PDF则只能通过页面缩放功能。除了通常的缩放外,还有余白切除、页面4分(两种排列方式)等缩放模式。余白切除是很好用的功能,可以扩大文字显示区域。不过对于图片式的PDF书籍来说并没有作用,Reader会将PDF书籍周围的余白认为是图片的一部分而不进行处理。不过非图片式的PDF倒是可以成功地进行处理,但这类资源相对来说比较少了。

可以对书籍任意做读书笔记,包括书签、高亮语句和手写笔记。对于ePub和XMDF格式,高亮和书签的位置会随着字体的改变而自动移动位置,十分人性化。对于图片形式的PDF,不支持高亮功能。但这也是意料之中的事了。

对于图片形式的PDF,还存在一个比较严重的问题。Reader屏幕的物理分辨率是800×600像素,实际用于显示书籍内容的分辨率为754×584。Reader会自动缩放以使图片PDF的内容适应屏幕,但在此过程中内容(主要是文字)会发生包括严重锯齿在内的质量劣化。对此有两种解决方案。其一:放大页面或是横屏阅读。放大页面后由于缩放算法问题而造成的文字不清问题就会得到解决。横屏阅读和放大的本质是相同的,通常横屏后书的一页会被分为上下两页显示,比单纯放大页面可以更容易地翻页阅读。其二:通过专门的软件制作754×584分辨率的图片形式PDF,这里推荐ChainLP。这是一款相当好用的电子书制作软件,可以制作出质量很高的图片形式PDF。此外支持青空文库格式TXT排版等的一系列的特色都让它成为了自制各类格式电子书的最佳选择。我使用ChainLP制作了一些自扫的电子书,效果都不错。一些B5尺寸的英文书籍通过ChainLP的优化也能在Reader上拥有可以接受的阅读效果(尽管字体依旧偏小)。

最后简单说下阅读中操作。通过触摸屏和实体按键都可以进行翻页操作;支持连续快速反应等页面导航功能;支持对比度和亮度调节,还有其他各种的设定和操作。各种操作的反应都很快,速度仅仅受限于E-Ink本身特性这一不可抗因素。

简单概括Reader的阅读效果:总体上得益于新一代的E-Ink Pearl屏幕,显示效果优秀。前代产品的反光问题也基本解决。并非针对文字内容设计的图片PDF缩放功能会导致文字不清。操作便捷反应快速。本身不支持中文。笔记功能很实用。

配套软件和线上书店

Reader的配套软件是SONY开发的eBook Transfer for Reader。通过它可以注册产品(注册即可获得500点索尼Point,国内用户可以无视)、进入SONY日本的Reader Store购买书籍、向Reader传输内容、管理备份Reader中的内容等。Reader Store由于刚启动三个月,书籍还非常少,更重要的是由于支付问题,国内用户也几乎无法使用。不过最近Reader Store有免费下载100本日文名著的促销活动,我得以使用了一次Reader Store。整个购买的过程很流畅,也很明了。Reader Store中的书籍通常比纸质版便宜不少(但是Amazon往往能提供更为便宜的电子书籍),现在看来唯一的问题就是书籍的总量和类型都太少,根本无法满足需求。不过其实除了SONY自家的Reader Store,不少其他线上书店提供的电子书格式也是被Reader所支持的,比如電子書店パピレス等。因此其实Reader可用的书籍资源并没有那么贫乏。当然,这一切对于国内用户来说基本都可以无视了…

至于Reader的书籍管理软件,除了配套的eBook Transfer for Reader之外,推荐开源软件calibre。这是最为著名的电子书籍管理软件之一,能很好的支持Reader。我认为它唯一的不足就是UI比较杂乱以及几乎每周要会发布新版本的更新…

最后一提,eBook Transfer for Reader中有为Reader升级固件的选项,不知道今后SONY会不会提供固件升级以改善Reader的软件表现呢?

总结

Reader有着优秀的硬件设计,但软件设计上则稍有不足,一些细节不够人性化,且日版的系统专为日本市场设计、对于中文用户来说不够友好。此外Reader较高的价格(几乎是低配Kindle的两倍)使其与Kindle的竞争力大减。我认为,Reader适合对硬件设计要求较高、重视触屏功能的人。这次的Reader并不能让人发出“不愧是索尼才能做到的事”的感叹,SONY要在电子书市场占有一席之地,要走的路还很长。

一些和Reader无关的话

目前电子书市场的发展受限于E-Ink屏幕技术制约。无论是Kindle也好Reader也好,都是采用E-Ink作为显示载体。尽管E-Ink确实在不断进步,甚至已经实现了彩色化,但是较慢的刷新速度和相对较高的价格仍然阻碍着电子书的普及。800×600的分辨率对于模拟纸张的效果来说也略显无力。不过这些不足肯定会在今后几年得以解决的吧。

国内虽有汉王、盛大锦书等在推动国产电子书行业的发展,不过残念的外观设计(主观感觉)、相对较弱的硬件功力、依旧不够亲民的价格、更重要的是国人少有大量阅读习惯等因素,使得国内电子书行业的前景尚不明朗……

在入手了Reader的一周内,自己的阅读效率大幅提高,地铁上等各种零碎时间都得以被利用来读书。自己读的书主要是自扫的PDF,闲书也有、专业书也有(在这里推荐一下佳能的扫描仪CanoScan LiDE 110,用于自扫制作电子书已经绰绰有余,在京东上的售价也相当优惠)。我认为,Reader可以说是自己这几年里买的最有价值的一件数码产品之一(其他的包括用了3年的卡西欧电子辞典和已经用了四年完全没有问题的电子表)。尽管我很喜欢纸质书籍翻页的感觉和纸张的声音,但是更认为电子书籍会在(还较为遥远的)将来成为主流的阅读工具,就像是当年纸张淘汰了竹简那样,淘汰纸张。

2011/06/17更新:

关于日版PRS-650对中文的支持问题

这里专门说明一下在不刷机的前提在PRS-650对中文的支持情况。普通的txt文件中的中文会显示为空格(无论使用何种编码)。而PDF文件可以正确显示中文。epub格式文件也可以正确显示中文。

关于中文电子书文件的制作

如果手头有中文txt文件,可以转换成PDF(推荐)或是epub文件后在PRS-650上正确显示中文。

PDF的转换最简单的方法就是使用Microsoft Office Word。将txt的内容复制,之后另存为pdf文件即可。

epub的转换也很容易。使用ChainLP这款软件打开要转换的txt文件,导出为epub文件即可。这款软件的功能非常强大,支持txt文件、压缩档案和文件夹的导入,支持pdf、epub、lrf等多种格式的导出。支持青空文库格式。支持各种排版调整。支持竖排排版。实际效果可以参见下图。

2011/11/06更新:

关于ePub格式无法正常显示图片的问题

似乎Reader对于部分ePub格式的电子书,只能在S字号下才能正常显示图片,其他字号下会有图片无法正常显示的问题。

常见布局对象

这一节将描述一些在程序中较为常用的布局对象类型。和其他布局一样,它们是ViewGroup的子类。另请参阅“Hello Views”教程以获取使用Android View布局的更多指导。

FrameLayout

FrameLayout是最为简单的布局对象类型。简单说它是屏幕上的一块空白空间,之后可以在其中填充单个对象——例如,一张需要读取的图片。所有FrameLayout的子元素位于屏幕的左上角;不能为子视图指定另外的位置。后继的子视图将简单地覆盖之前的视图,部分或是完全遮住它们(除非新的那个对象是透明的)。

LinearLayout

LinearLayout根据在orientation属性中所定义的,沿着单一方向——水平或是垂直——排列子视图。所有的子视图一个接一个堆砌,因此一个垂直列表中无论子视图有多宽,每一行都只有一个子视图。而一个水平列表高度只有一行(最高的子视图的高度加上间隙)。LinearLayout能显示每一个子视图之间的边距和重力(右侧、中心或左侧)。

LinearLayout还支持为其单独的子元素设定权重(weight)。该属性给视图设定了“重要性”。允许其扩展填充父视图中的任意剩余空间。子视图可以指定一个整型权重值,之后视图组中的剩余空间会按子视图所声明的权重比来分配。默认权重是零。例如,如果有三个文本框,其中两个的权重被声明为1,另一个没有权重(0),那么这个没有权重的文本框不会扩展,只会占它内容所需的空间。另两个会按相同比例扩展,充满三个文本框被计算后所剩余的空间。如果第三个文本框权重为2(而不是0),那它就被声明为比其他两个”更为重要“,而获得总剩余空间的一半,另两个则是平分另一半。

下面的两种形式代表了含有一组元素的LinearLayout:一个按钮、一些标签和一些文本框。文本框的宽度设置为fill_parent;其他元素设置为wrap_content。重力(gravity)默认是向左(left)。两个版本哦差异在于左边的没有设置权重(默认为零),右边的一个文本框的权重被设为了1。如果Name文本框也被设为了1的话,Name和Comments文本框则会一样高。

 

linearlayout
linearlayout

Tip:为了在屏幕上创建比例合适的布局,可以创建一个容器视图组,layout_widthlayout_height属性设为fill_parent;设置子视图的高和宽为0;根据所希望的屏幕比例设置每一个子视图的相对权重(weight)。

在一个水平LinearLayout中,项目根据其文本基准线的位置排列(最上部或最左侧的第一个元素的第一条线被认为是参考线)。这样在浏览元素时就不必上下移动视线以阅读相邻元素的元素文本了。可以通过在布局XML中设置android:baselineAligned=”false”来关闭这一功能。

要查看其他的范例代码,请参阅“Hello LinearLayout”教程。

TableLayout

TableLayout将其子视图按行、列排列。TableLayout容器不显示其行、列或单元格的边线。表格的列数和拥有单元格最多的那行相同。一张表格可以有空单元格,不过单元格无法跨越列,就像HTML中一样。

TableRow对象是TableLayout的子视图(每一个TableRow定义了表中单独的一行)。每一行有零个或更多的单元格,其每一个可以被其他类型的视图所定义。因此,一行单元格可能是由多种View对象,比如ImageView或TextView,构成的。一个单元格也可以是一个ViewGroup对象(例如,可以把另一个TableLayout嵌套于一个单元格内)。

下面的范例布局有两行,每行有两个单元格。相应的截图显示了其结果,单元格边界以点线显示(作为视觉效果而添加)。

可以将竖栏隐藏、拉伸填充屏幕或是标记为可缩小的以强制缩小表格适应屏幕。参见TableLayout参考文档以了解更多细节。

参见“Hello TableLayout”教程以查看范例代码。

RelativeLayout

RelativeLayout允许子视图指定它们相对于父视图的位置或它们之间的相互位置(通过ID来指定)。因此可以将两个元素靠着右侧边缘排列,或是于屏幕中心、或偏左侧上下排列,或是其他排列方式。元素将按指定的方式排列,因此如果第一个元素位于屏幕中央,其他和该元素相关的元素也会相对于屏幕中央进行排列。同时,由于有这样的顺序,如果是通过XML指定这种视图的话,要引用的元素(为了能定位其他的视图对象)必须在在其他视图引用其ID之前就被列于XML文件之中。

下面的例子展示了一个XML文件及其屏幕界面的显示结果。需要注意,引用了相对元素的那些属性(比如,layout_toLeft)是通过相对资源(@id/id)的语法来引用其ID的。

这些属性中的一部分直接被元素所支持,另一些则被其LayoutParams成员(RelativeLayout对于屏幕上所有元素的子类,这是因为所有元素都是RelativeLayout父对象的子对象)所支持。所定义的RelativeLayout参数有:widthheightbelowalignToptoLeftpadding[Bottom|Left|Right|Top]margin[Bottom|Left|Right|Top]。注意,其中一些参数是用于指定相对布局位置——它们的值必须是希望作为相对视图基准的元素的ID。例如,设置参数toLeft=”my_botton”至一个TextView将把该TextView放在ID为my_button的元素(比如在XML中先于TextView出现)的左侧。

要查看该范例代码,请参见“Hello RelativeLayout”教程。

重要视图组的总结

这些对象都有子UI元素。一些提供了可见的界面自有形式,另一些则是不可见的结构,只能用于管理其子视图。

描述
FrameLayout 用于显示单个对象的视图框架布局。
Gallery 一个可水平滚动的图像列表。
GridView 显示m列n行可滚动的表格。
LinearLayout 将子元素水平或是垂直排列为一行/列的布局。如果视窗长度超过屏幕长度,将会自动创建滚动条。
ListView 显示一列滚动列表。
RelativeLayout 允许指定子对象相互之间的位置(如:子对象A在子对象B的左侧) 或与父对象的相对位置(如:在父对象的上部)。
ScrollView 一列垂直的可滚动元素。
Spinner 在一个单行文本框中显示所绑定列表的其中一行。就像一个列表框,可以水平或是垂直下拉。
SurfaceView 提供所指定绘图表层的直接读取。 它可以持有位于屏幕表面的子对象,不过其实是为在屏幕上进行像素操作而非使用控件而设计的。
TabHost 提供了一个标签页选择器,通过监视点击行为以在标签被选择时切换屏幕内容。
TableLayout 一个行列数固定的表格布局。每一个单元格可以持有一个所选择的控件。每一行会自适应最大的列数。单元格的边界是不可见的。
ViewFlipper 在一个单行文本框中一次显示一个项目的列表。可以设置如同幻灯片一样在一定时间间隔后切换项目。
ViewSwitcher 和ViewFlipper相同。

返回用户界面

本页部分内容根据Android Open Source Project创作并共享的内容修改,并在知识共享 署名2.5许可协议中所述条款的限制下使用。

Android模拟器

Android SDK包含了一个移动设备模拟器——一个运行于你的电脑上的虚拟设备。模拟器可以让你进行原型和开发工作,同时可以在没有实体设备的情况下测试Android应用程序。

本作品采用知识共享 署名-非商业性使用-禁止演绎 3.0 Unported许可协议进行许可。

开发者指南

欢迎来到Android开发指南!本指南提供了开发Android程序的实用指导和有关平台主要特性的文档。指南挖掘了Android背后的理念,解析了构造应用程序的框架,并介绍了在平台上开发、测试和发布软件的工具。

开发指南包含了Android平台的大部分文档,但不包括框架API的参考资料。对于API的特性,请见参考。

本指南分为若干部分:

Android基础

对Android的最初介绍——它是什么,它提供了哪些内容,你的程序如何适于Android。

框架主题

讨论Android框架和API的具体部分。通过应用程序基础一文获取对框架的简单介绍。之后按需探索其他的主题——从设计用户界面并设置资源到存储数据及使用权限。

Android Market主题

与在Android Market中发布并销售应用程序的主题有关的文档,例如如何加强授权政策以及应用程序内付款。

开发

使用Android开发调试及测试工具的说明。

发布

关于如何准备部署你的应用程序以及如何在准备好之后发布它的一些说明。

基本练习

关于编写高效率高兼容性的应用的推荐技巧。

网络应用程序

关于如何创建无缝运行于Android设备上的网络应用程序以及创建嵌有基于网络的内容的Android应用程序的文档。

附录

参考信息和特性,以及常见问答、术语表和其他信息。

在下载了SDK之后,从阅读开发指南起步吧。如果想要通过查看代码来开始学习,Hello Wordl教程通过一个标准的“Hello World”程序向你介绍了Android应用程序的一些基础知识。应用程序基础文档是学习应用程序框架的一个不错的入门材料。

要获取更多帮助,可以考虑加入一个或多个Android讨论小组。前往开发者论坛页面以了解更多。

本作品采用知识共享 署名-非商业性使用-禁止演绎 3.0 Unported许可协议进行许可。

WordPress 3.1升级完成

今天把博客升级到了WordPress 3.1,有些不习惯呢。意外的收获是修复了一些之前始终没能解决的小问题。

搭建这个博客以来,主要写的都是Android方面的东西,其实本来是想多写点自己的想法的。时间不够用啊。不过日积月累下来,也多不少内容了。今后也会继续好好打理这个博客。