公制和框格(grid)

设备不仅物理尺寸不同,屏幕密度(DPI,Dots Per Inch)也不相同。为了简化在不同屏幕时的设计,想象每一种设备都被分类放入指定的“尺寸桶”和“密度桶”中。“尺寸桶”分为手持设备(小于600dp)与平板设备(大于等于600dp)。“密度桶”分为LDPI(Low DPI,120)、MDPI(Medium DPI,160)、HDPI(High DPI,240)与XHDPI(Extra High DPI,320)。为不同“尺寸桶”设计不同的界面布局并为不同的“密度桶”提供不同的位图图片以优化程序的用户界面。

空间问题
设备能够显示的密度无关像素(density-independent pixel,dp)是不同的。
更多内容请参见“屏幕尺寸与密度”数据页面

48dp律

可触控的UI组件通常是48dp大小的。

为什么是48dp?
通常,48dp相当与物理尺寸的9mm(有时可能会有些差异)。这在可触控元素的推荐尺寸(7-10mm)之内,因此用户可以准确地用手指按下这些元素。

如果你将元素的长宽设计为48dp以上的话:

  • 无论在何种屏幕上你的元素都不可能会比最小推荐触控尺寸的7mm更小。
  • 你将在整体信息密度和界面元素的易触控性之间取得很好的平衡。

注意间距
给每个UI元素保留8dp的间距。

范例

上一节

下一节

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

触摸反馈

应当使用色彩与光亮来响应触摸操作,加强手势操作的行为结果,并且标识出那些操作是可用的,而哪些是不可用的。

当用户触摸你的程序中的某一可操作区域时,应当提供视觉反馈。这样能让用户知道他触摸到了哪一个部件,并且你的程序确实接收到了触摸。

状态

 

Android的大部分UI元素都内建了触摸反馈,包括了能够显示触摸该元素是否会产生效果的标识状态。

交流

当你的部件要对更为复杂的手势操作进行回应时,应当帮助用户理解该操作将会产生什么结果。例如,在“最近情况(Recents)”中,当你开始将一个图标向左或向右滑动时,该图标就会变得暗淡。这帮助用户理解滑动操作会是条目被移除。

边界

当用户的拖动操作超过了可滚动区域的上下界时,应当将该边界以一种视觉的方式提示给用户。例如,当用户要继续拖动屏幕至第一个主界面之前时,屏幕上的内容将会倾斜以表明不能继续进行这个方向的拖动。许多Android的可滚动UI部件(例如列表和格状列表)已经支持了内建的边界反馈。如果你要构建自定义的可滚动部件,应当也采用边界反馈。

上一节

下一节

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

 

主题

主题(theme)是Android在一个应用或活动(activity,即应用的一个部件)中实现一致风格的机制。该风格指定了在你的用户界面中使用的元素的视觉属性,例如色彩、亮度、间距和字体尺寸。为了令整个系统平台上所有的程序风格能更为协调,Android提供了三种系统主题,可以在构建Android ICS版本的应用时选用:

  • Holo Light(亮色版Holo)
  • Holo Dark(暗色版Holo)
  • Holo Light with dark action bars(使用暗色动作栏的亮色Holo)

采用这些主题对你构建程序将会大有帮助,能使你的程序和Android的视觉风格相符。

选用和你程序的需求以及设计美学相适合的系统主题。如果你希望程序有一个更为独特的外观,那么根据某一系统主题进行自定义修改是不错的主意。系统主题提供了一个你可以进行自定义风格选用的坚实基础。

Holo Light主题的Gmail

Holo Dark主题的系统设定界面

使用暗色动作栏的Holo Light主题的Talk

上一节

下一节

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

设备与显示

Android在数以千万计的手机、平板电脑或是其他设备上运行,它们使用着各种不同尺寸和类型的屏幕。通过利用Android灵活的布局系统,你可以创建出在大到平板电脑小至手机上都能优雅地适配的应用程序。

设计为可适配的
根据不同的高度和宽度自动拉伸或是压缩布局

对布局进行优化
在大型设备上充分利用较大的屏幕面积。创建结合了多个视图的混合型视图以显示更多内容且易于导航。

为所有设备提供素材
为不同的屏幕密度(DPI)都提供资源以确保你的应用在任何设备上都有最佳视觉效果

策略
该从何入手为各种屏幕进行设计呢?一种方式是基于基本标准(中型尺寸,中等屏幕密度MDPI)来进行设计之后为其他屏幕进行缩放。另一种方法是以最大屏幕尺寸为基准来设计,之后为小型屏幕使用缩小后的UI元素。

关于这个主题的更多细节内容,请参阅文章“支持多种屏幕”。

上一节

下一节

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

用户界面(UI)综览

Android系统的UI提供了用以构建程序的框架。其中比较重要的方面包括有主界面(Home screen)体验、全局设备导航和通知。

你的程序对于保持Android整体体验的一致性和易用性有着重要作用。在本章的最后,我们将介绍一些你的程序为了达到这一目标所需的一些主要元素。

 

主界面、所有程序,以及最近情况

“主界面”界面
主界面是一个可自定义的保存程序快捷方式、文件夹和插件的空间。在不同的主界面面板之间可以通过左右滑动切换。底部的收藏夹托盘存有最为重要的快捷方式和文件夹,无论处于哪一个主界面面板它都将被显示。
要查看所有的程序和插件,只需点击收藏夹托盘中间的“所有程序”按钮。

 

 

 

 

 

 

 

 

 

“所有程序”界面
“所有程序”界面让你可浏览安装于设备中的所有的程序和插件。
用户可以从“所有程序”界面中拖动程序或是插件的图标至主界面的任何空着的地方。

 

 

 

 

 

 

 

 

 

 

“最近情况”界面
“最近情况”提供了一种在各种最近使用过的程序间切换的有效方式。它在多个正在运行的程序间提供一条清晰的导航路径。
导航栏右侧的最近情况键显示了用户最近使用过的程序。它们以逆序方式排序,最近使用的程序被显示在底端。
通过点击来切换程序。通过向右滑动图标来消除一个条目。

 

 

 

 

 

 

 

 

 

 

系统栏

系统栏是用于显示通知、设备状态和设备导航等内容的屏幕区域。一般来说系统栏和程序同时被显示。一些程序会显示需要集中注意力的内容,例如电影和图片,它们可以暂时隐藏系统栏以让用户享受全屏内容而不会分心。

1、状态栏
在左侧显示待处理的通知,在右侧显示如时间、电池状态或是信号强度等状态。
下拉状态栏以显示通知的具体内容。

2、导航栏
Android 4.0中新采用的导航栏,只出现在没有传统物理按键的设备上。它包含了设备导航键——“返回”、“主界面”和“最近情况”,同时也会显示Android 2.3或更早版本中的选项菜单。

3、组合栏
在平板上的将状态栏和导航栏合并而成的单一栏,位于屏幕底部。

 

通知

通知是用户可以在任何时候都能从状态栏访问的简单信息。它们提供了升级、提醒等一些重要但不那么紧急而需要立刻打断用户的信息。通过下拉状态栏以打开通知下拉窗口(drawer)。点击通知以打开关联程序。参见“通知”(链接待添加)。

 

 

 

 

 

 

 

大多数通知有一条标题和一条消息。推荐的通知布局为两行。如有必要,可以增加第三行。而时间戳是可选项目。
向左或是向右滑动一条通知可以将其从通知下拉窗口中移除。

 

 

 

 

 

 

 

 

 

常见程序UI

一个典型的Android程序包含了动作栏和程序内容区域。

1、主动作栏(Main Action Bar)
你的程序的主要的控制中心。主动作栏包含了在程序层级、视图间导航的元素,以及大部分重要的操作。
更多内容参见“动作栏”(链接待添加)。

2、视图控制(View Control)
允许用户程序的不同视图之间切换。视图内容通常为数据的不同编排方式或是程序的不同功能。

3、内容区域
显示程序内容的区域。

4、分隔动作栏(Split Action Bar)
通过在主动作栏下方或是屏幕底部显示分隔动作栏可以进行更多的操作。在这里,分隔动作栏中包含了主动作栏里放不下的功能。

 

 

 

 

 

 

 

 

 

上一节

下一节

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

设计原则

这些设计原则是由Android用户体验团队所设制的,用以最大程度地保持用户的兴趣。在自己的创作和设计思想中也要想到应用他们。按照目的来进行最适合的改变。

吸引我

用令人惊讶的方式来令我感到愉悦
一个美观的界面,一个精心设计的动画,或是恰到好处的音效都是一种愉快的体验。精巧的细节效果可以令人更觉程序轻松易用,有如掌握着强大的力量。

现实感的物件比按钮和菜单更加有趣
允许人们在你的程序里直接触摸并操作物件。这样就降低了进行操作时认知成本,并更令人感到心满意足。

让它成为属于我的东西
人们喜欢增加个性化的内容,这让他们有掌控自如的感觉。提供精美的默认界面,但是在不影响主要功能的前提下也要考虑添加些有趣的可选自定义内容。

了解我
在使用过程中学习人们的偏好设置。不要总是一次次地问人们相同的问题,而是把上一次的选项置于默认的位置。

简化我的生活

保持简约
用简单的词或词组。人们很容易跳过长篇大论的文字。

图片胜过文字
试着用图片来解释想法。它们能够比文字更有效地吸引人们的注意并令他们理解。

为我作好选择,不过最终由我决定
在询问用户之前就猜测其最佳选项。太多的选择和做决定会让人感到不快。在万一操作错误的时候,也要提供“撤销”功能。

仅在我需要的时候显示它
人们在一下子看到太多东西时会不知所措。把操作和信息分成小而易于理解的部分。把暂时不需要的选项隐藏起来,并且在之后告诉人们如何使用。

我需要知道我在哪里
让人们确信他们知道他们在哪里。让你的程序看起来易于识别,并在不同屏幕内容之间用过渡效果来表现其关联性。对正在运行的工作提供反馈信息。

不要丢失我的内容
保存人们花费了时间创造出来的内容,并允许人们从任何地方都能读取这些。记住用户的设置、个性化的修改,并能在手机、平板和电脑之间交互。这样就能使得更新内容变得轻而易举。

如果它看起来相似,那么它应该功能上也相似
通过把不同的功能图标设计得看上去就不同来帮助人们识别不同的功能。要避免把有着不同效果的功能设计的看起来很相像。

仅在有重要情况时才打断我
需要像一位优秀的个人助理那样,让用户免受不重要的琐事的烦扰。人们喜欢保持注意力,除非非常紧急,不然打断人们会让他们感到烦躁。

让我惊讶

在各个地方给我提示
人们会在以己之力解决问题时感到畅快。让你的程序变得简单易学——通过有效的视觉设计以及具有和其他Android程序相似的操作方式。例如,滑动手势操作可以是一种很好的程序导航快捷方式。

不是我的错
在试图让人们改正错误时要有耐心。他们希望在使用你的程序时能够看起来很聪明。如果发生了错误,需要给出明确的恢复方法,不过不要有太多的技术细节。如果可以在后台自动解决问题那就再好不过了。

给予支持
把复杂的操作分割为容易完成的小块。对于用户操作要给予反馈,即使仅仅是让图标小小地发一下光。

为我处理复杂内容
通过让新手完成他们以为自己难以完成的工作来让他们感觉好象是熟练的专家。例如,包含了多种照片效果的快捷方式可以让业余级的照片仅仅在一次操作后就看起来令人惊讶的好。

让重要的事情快速完成
并非所有的操作都是相同重要的。决定好你的程序中什么是最重要的,并把其放在明显的位置以能够快速启动,就好象相机程序中的快门键或是音乐播放器中的暂停键。

上一节

下一节

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

创造性的视野

冰激凌三明治(Android 4.0)是Android设计中的一个重要里程碑。我们涉及了系统的几乎每一个像素,包括把蜂巢(Honeycomb)平板中的新的设计方式扩展到了所有类型的移动设备上。从最为基础的元素来时,我们引入了一种新的字体,Roboto,它专为高分辨率显示而设计。其他大的改动包括手机上框架级别的动作栏以及对没有物理按键的新手机的支持。

我们将从三个整体性的目标出发来关注核心程序以及整个系统的设计。在设计运行于Android的程序时,请考虑一下目标:

吸引我

美不仅是表层的。Android应用在多个层面上都是流畅而具有美感的。翻译简洁明了;布局和版式简约而有意义。程序图标本身就是一种艺术品。就如制作精良的工具,你的程序应该尽可能地美观,简约,以创造一种使用轻松而功能强大的神奇体验。

简化我的生活

Android程序让生活更加简单而易于理解。当人们第一次使用你的程序时,他们应该能凭直觉理解程序最主要的功能。不过设计并不止于此。Android程序去除了如文件管理和同步之类的繁琐工作。简单的事将不需要复杂的操作,而复杂的事被设计为人们易于操作的。各个年龄,各种文化背景的人们都能很好地掌握程序用法,而不会因为太多的选项或是不相关的内容而不知所措。

让我惊讶

仅仅让一个程序简单易用还不够。Android程序让人们以创造性的方式去尝试新的事物。Android程序通过多任务、通知和跨程序共享来让人们以新的流程来使用各种程序。同时,你的程序应该是能适合于个人的,让人们能够简明而优雅地使用到优秀的技术。

上一节

下一节

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

动作栏(Action Bar)

Action Bar是活动中的一种控件,用以代替传统的屏幕顶端的标题栏。默认,Action Bar包括了左侧的应用程序图标(logo),其右是活动的标题,以及Option Menu中的可选项目。Action Bar提供了多种便利特性,包括:

  • 直接在Action Bar中显示Option Menu中的项目,称之为“动作项目(action item)”——以提供对于关键用户操作的快速选择。没有作为动作项目显示的菜单项目则位在浮动式菜单中,通过Action Bar的下拉列表显示。
  • 提供在不同片段之间的导航标签。
  • 提供导航用的下拉列表。
  • 提供交互式的“动作视图(action view)”以代替动作项目(例如搜索框)。
图1. Email应用程序中Action Bar的一个截图,包含了编写新邮件和刷新收件箱的动作项目。

添加Action Bar

Action Bar在Android 3.0及以上的活动中是默认被包含的。更为具体地说,所有使用了新的“holographic”主题的活动将包含Action Bar,而任何以Android 3.0为目标平台的应用程序将自动使用该主题。当一个应用程序在<uses-sdk>元素中设置了android:minSdkVersionandroid:targetSdkVersion属性为“11”或更高时,被认为是以Android 3.0为目标平台的。例如:

在本范例中,程序请求了最小API等级为4(Android 1.6),而目标API等级为11(Android 3.0)。这样,当程序安装于运行Android 3.0或是更高版本的设备上时,系统将为每一个活动提供holographic主题,因而每个活动都将包含Action Bar。

不过,如果希望使用Action Bar的API,例如添加标签或是修改Action Bar风格,就需要将android:minSdkVersion设为“11”,这样才能使用ActionBar类。

移除Action Bar

如果希望从某个指定的活动中移除Action Bar,只需将该活动的主题设为Theme.Holo.NoActionBar。例如:

提示:如果希望从一个自定义的主题中移除Action Bar,只需将android:windowActionBar样式属性设为false。关于更多Action Bar样式的内容请参见“对Action Bar使用样式”。

还可以在运行时通过调用hide()来隐藏Action Bar,之后通过调用show()来再次显示它。例如:

当Action Bar隐藏时,系统将调整活动的内容来填充可用的屏幕空间。

注意:如果移除了使用主题的Action Bar,那么该窗口将完全禁用Action Bar而无法再在运行时添加——调用getActionBar()将返回null。

添加动作项目

动作项目仅仅是Option Menu中被声明要直接显示在Action Bar上的菜单项目。一个动作项目可以包括一个图标和/或文本。如果一个菜单项目不是动作项目,那么系统将把它放在浮动式菜单中,用户可以通过选择Action Bar右侧的菜单图标打开浮动式菜单。

当活动启动时,系统将通过调用onCreateOptionMenu()来为活动生成Action Bar和浮动式菜单。如同在“菜单”开发者指南中所描述的,这是为活动定义Option Menu的回馈方法。

可以指定某一菜单项目作为动作项目显示——如果有这样的空间的话——通过在菜单资源中为<item>元素声明android:showAsAction=”ifRoom”。这样,该菜单项目仅会在空间足够时显示在Action Bar中以供快速选择。如果空间不足,该项目将被置于浮动式菜单中(通过Action Bar右侧的菜单图标打开)。

可以在应用程序代码中声明一个菜单项目为动作项目,只需对MenuItem调用setShowAsAction()并传递SHOW_AS_ACTION_IF_ROOM。

如果菜单项目同时提供了标题和图标,那么动作项目默认只显示图标。如果希望让动作项目包含文本,需要在XML中添加”with text”旗标、对android:showAsAction属性添加withText,或是在程序代码中调用setShowAsAction()并使用SHOW_AS_ACTION_WITH_TEXT旗标。图2展示了有两个带有文字的动作项目以及浮动式菜单图标的Action Bar。

图2. 有两个动作项目以及浮动式菜单图标的Action Bar的屏幕截图。

下面是一个在菜单资源文件中将菜单项目声明为动作项目的一个范例:

在这时,ifRoomwithText旗标都被设置了,所以当这个项目作为动作项目显示时,它包含了图标以及标题文本。

Action Bar中的菜单项目和Option Menu中的其他项目都会启发相同的回馈方法。当用户选择了一个动作项目时,活动将收到一个onOptionsItemSelected()的调用,并传递项目ID。

注意:如果用片段中添加菜单项目,那么该片段相应的onOptionsItemSelected()方法将被调用。然而活动可以在此之前先对其进行处理,也就是说系统对活动的onOptionsItemSelected()调用要先于对片段的。

可以声明一个项目总是作为动作项目出现,不过这并不被推荐,因为这会在有太多的动作项目时让UI变得混乱,Action Bar中的动作项目将会项目重叠。

关于菜单的更多信息,请参见“菜单”开发者指南。

将应用图标用作菜单项目

应用程序图标默认出现在Action Bar的左侧。它也将响应用户交互操作(当用户点击它时,它会有和其他动作项目一样的视觉响应),但需要手动指定用户点击时的行为。

图 3. Email的Action Bar,左侧有应用程序图标。

通常的行为应当是在用户单击图标时让应用程序回到“主活动”或是(比如,在活动没有发生变化而片段变化了的时候)回到初始状态。如果用户已经处于主活动或是初始状态,则不必进行任何处理。

当用户单击图标时,系统以android.R.id.home的ID调用该活动的onOptionsItemSelected()方法。因此,需要在onOptionsItemSelected()方法中添加一个条件判断来侦听android.R.id.home并执行正确的行为,例如启动主活动或是将最近的片段事务出栈。

如果通过返回主活动来响应应用图标的点击,那么需要在Intent内包含FLAG_ACTIVITY_CLEAR_TOP旗标。这样,如果要启动的活动已经存在于当前任务的话,所有在其上的活动将被销毁,该活动将回到最上层。这种方式是令人满意的,因为回到“主活动”和“返回”是等价的,不应该为主活动创建新的实例。否则,最终在当前任务中会有一个很长的活动栈。

例如,下面是一个onOptionsItemSelected()的实现,它将返回应用程序的“主活动”:

使用应用图标来进行”向上一级“导航

还可以使用应用程序的图标来为用户提供“向上一级”的导航。这在程序中的活动总是以某种固定的顺序出现并期望用户能方便地返回上一级活动的情况下特别有用(不过无所谓用户是怎样进入当前的活动的)。

响应这一事件的方式和返回主活动的方式是相同的(和上文所说的类似,只不过现在是根据当前的活动是哪一个来启动另一个不同的活动)。为了告诉用户这时的情况将有所不同,唯一需要做的就是把Action Bar设为“show home as up”。这通过对活动的ActionBar调用setDisplayHomeAsUpEnabled(true)即可完成。这时,系统将为应用程序的图标增加一个表示向上一层动作的箭头,就像图4这样。

图 4. Email应用的标准图标(上)和“向上一层”图标(下)。

例如,下面是将应用图标表示为“向上一层”动作的方法:

之后,活动应当在用户单击图标时进行响应,在onOptionsItemSelected()中,通过监听ID android.R.id.home(如上所示)。在这种情况下,当向上导航时,在Intent中使用FLAG_ACTIVITY_CLEAR_TOP旗标是更为重要的,这样才能不在上级活动的实例已经存在时还再次创建一个新的。

添加一个动作视图(Action View)

动作视图是在Action Bar上出现的一个控件,作为动作项目的一种替代。例如,如果在Option Menu中有一个项目是“搜索”,那么当该项目作为动作项目使用时可以在Action Bar中为该项目添加一个提供SearchView控件的项目。

当为一个菜单项目添加动作视图时,允许该项目在没有出现于Action Bar时仍能作为一个通常的菜单项目执行指令是很重要的。例如,一个执行搜索工作的菜单项目应该默认弹出Android搜索对话框,但如果该项目被置于Action Bar的话,动作视图将以SearchView控件的形式显示。图4展示了一个动作视图的SearchView控件的范例。

图4. 带有一个SearchView控件的动作视图。

为一个项目声明动作视图最好的方式是在菜单资源中使用android:actionLayout或是android:actionViewClass属性:

  • android:actionLayout的值必须是指向一个布局文件的资源指针。例如:

  • android:actionViewClass的值必须是一个所要使用的View的完整类名。例如:

必须包含android:showAsAction=”ifRoom”以使项目在空间足够时作为动作视图显示。不过,在必要时,可以通过设置android:showAsAction“always”来强制该项目以动作视图显示。

现在,当菜单项目作为一个动作项目显示时,它将是一个动作视图而不是图标和/或标题文本。不过,如果在Action Bar中没有足够的空间的话,该项目将在浮动式菜单中以一个通常菜单项目的形式显示,必须在onOptionsItemSelected()回馈方法中响应该项目。

当活动首次启动时,系统通过调用onCreateOptionsMenu()生成Action Bar和浮动式菜单。当菜单在该方法中被展开之后,可以通过以菜单项目的ID调用findItem()来获取动作视图的元素(比如为了绑定监听器),而后对所返回的MenuItem调用getActionView()。例如,上面的例子里的搜索控件可以像这样获得:

关于使用搜索控件的更多信息,请参见“创建一个搜索接口”。

 添加标签(tab)

动作栏可以显示标签以使用户在活动内的不同片段之间导航。每一个标签可以包含一个标题和/或一个图标。

图 6. 在Honeycomb版本的图库范例程序中的Action Bar中的标签的截图。

首先,布局必须在每一个和显示的表现相关联的Fragment中包含一个View。要确保该视图有一个能在代码中引用的ID。

要添加标签至Action Bar:

1. 创建一个ActionBar.TabListener的实现来处理Action Bar标签的交互事件。比如实现所有的方法:onTabSelected()、onTabUnselected()和onTabReselected()。

每一个回馈方法都将传递收到了事件的ActionBar.Tab和一个FragmentTransaction用以执行片段事务(添加或是移除片段)。

例如:

这种ActionBar.TabListener的实现添加了一个保存与标签关联的Fragment的构造函数以使每一个回馈函数可以添加或是移除片段。

2. 在onCreate()时通过在Activity中调用getActionBar()来获取活动的ActionBar(不过要注意需要在调用了setContentView()之后才这么做)。

3. 调用setNavigationMode(NAVIGATION_MODE_TABS)来开启ActionBar的标签模式。

4. 为Action Bar创建所有的标签:

1. 通过对ActionBar调用newTab()来创建新的ActionBar.Tab。

2. 通过调用setText()和/或setIcon()来为标签添加文字和/或图标。

提示:这些方法返回相同的ActionBar.Tab实例,所以可以将这些调用一起使用。

3. 声明ActionBar.TabListener,并通过向setTabListener()传递其实现的一个实例来使用它。

5. 通过对ActionBar调用addTab()来添加所有的ActionBar.Tab,并传递它们。

例如,下面的代码结合了步骤2-5来创建了两个标签并将它们添加至了Action Bar:

标签被选中时所有需要进行的行为都必须在ActionBar.TabListener回馈方法中被定义。当一个标签被选中,它将收到一个onTabSelected()的调用,应当在这里通过使用add()及所提供的FragmentTransaction来向布局中指定的视图添加正确的片段。类似的,当一个标签被取消选中时(因为另一个标签被选中了),则应当使用remove()来从布局中移除该片段。

注意:不能为这些事务调用commit()——系统会调用它,如果手动调用的话将会抛出一个例外。同时也不能将这些片段事务添加至返回栈。

如果活动被中止,应当保存当前选中的标签,这样当用户返回应用程序时,可以打开该保存的标签。在保存状态时,可以通过getSelectedNavigationIndex()获取当前选中的标签。这将返回所选标签的索引位置。

注意:应该在必要时保存每一个片段的状态,这样用户在切换标签并返回前一个片段时能保持之前的样子。关于保存片段状态的更过信息,请参见“片段”开发者指南。

添加下拉式导航

 

由于官方对文档进行了更新,有较大的改动。因此对于本文的翻译暂时中止,将在之后进行重新翻译。

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