在Android平台上的各种屏幕尺寸的运行和系统调整大小正常应用程序的用户界面,以适应每个人。通常情况下,你需要做的是设计你的UI是灵活的,并通过提供替代资源(如重新定位的一些看法观点或替代尺寸值替代布局)优化不同尺寸的一些元素。但是,有时你可能想更进一步优化不同屏幕尺寸的整体用户体验。例如,平板电脑报价在您的应用程序可呈现信息的多组再一次的空间,而手机设备通常需要你除了那些分裂和集分别显示出来。因此,即使专为手机的UI将正确地调整以适应平板电脑,它没有充分利用平板电脑的屏幕的潜力,提升用户体验。
与Android 3.0(API级别11),Android的推出了一套全新架构的API,让你更有效地设计出带大屏幕的优势活动:该片段的API。片段让你UI的不同行为成分分离成独立的部分,然后你就可以结合起来,创造在手机上运行时,在不同的活动片剂或原地踏步的时候多窗格布局。 Android 3.0的还推出了动作条,而在屏幕识别应用程序,并提供用户操作和导航的顶部提供了一个专用的用户界面。
本文件提供指导,可以帮助您创建,提供了两个手机和平板电脑独特的和优化的用户体验,使用碎片和操作栏的应用程序。
继续之前本指南,这一点很重要,你先阅读指导,以支持多种屏幕。该文件描述了开发支持不同的屏幕尺寸和密度分别为灵活的布局和替代位图,一个UI的基本设计原则。
基本方针
这里有一些指导方针,这将有助于您创建提供平板电脑和手机优化用户体验的应用程序:
构建基于你可以在不同的重用组合,在手机上的平板电脑和单窗格布局多窗格布局片段您的活动设计。
一个片段代表的行为或活动的用户界面的一部分。你可以把一个片段作为一项活动(活动的“片段”),它有它自己的生命周期,并可以添加或活动运行时卸下的模块化部分。
如果你还没有使用碎片的是,通过阅读片段开发人员指南开始。
使用操作栏,但遵循最佳实践,并确保你的设计是系统调整基于屏幕尺寸的操作栏布局不够灵活。
在ActionBar是活动的一个UI组件,在屏幕的顶部取代了传统的标题栏。默认情况下,操作杆包括在左侧的应用程序的标志,随后的活动标题,并获得从右侧的选项菜单项。
您可以启用从选项菜单项直接在操作栏为“行动项目”出现。您还可以添加导航功能的操作栏,如制表符或一个下拉列表,并使用应用程序图标的选项,以补充系统的后退按钮行为,浏览到您的应用程序的“家”活动或“涨”应用程序的结构层次。
本指南提供了同时支持平板电脑和手机的方式使用操作栏的一些技巧。对于操作栏API的详细讨论,请参阅操作栏开发人员指南。
实施灵活的布局,作为最佳实践支持多种屏幕和博客文章,思维就像一个网页设计师讨论。
一个灵活的布局设计,让你的应用程序,以适应屏幕尺寸的变化。不是所有的片具有相同的尺寸,也不是所有的手机的大小相同。虽然你可能会为“平板电脑”和“手机”提供不同的片段组合,它仍然是必要的,每一个设计灵活,以调整在尺寸和长宽比的变化。
下面的章节中详细讨论前两个建议。有关创建灵活布局的更多信息,请参阅上面提供的链接。
注:除了操作栏中的一个特征,来完成本文档中的建议所需的所有API都可以在Android 3.0的。此外,你甚至可以实现片段的设计模式,并保持与Android 1.6的向后兼容,用下侧栏库讨论了支持。
创建单窗格和多窗格布局
剩余向后兼容
如果你想在你的应用程序中使用的碎片,并保持与Android版本早于3.0版兼容,您可以通过使用Android的支持库(从SDK管理器中下载)这样做。
支持库包括片段,装载机,并在Android中的较新版本中添加的其他API的API。通过简单地添加这个库到你的Andr??oid项目,您可以使用这些API的向后兼容的版本,在您的应用程序,并保持与Android兼容1.6(在Android:值的minSdkVersion可低至“4”)。有关如何获取该库,并开始使用它的信息,请参阅支持库文件。
支持库不提供操作栏的API,但你可以使用代码示例应用程序,操作栏的兼容性,创建一个支持所有设备的操作栏。
创建平板电脑和手机一个独特的用户体验,最有效的方法是创建片段的不同组合,平板电脑,这样你可以设计“多窗格”布局和手机“单一平台”布局的布局。例如,在片剂的新闻应用程序可能显示的物品在左侧的列表和在右侧,选择左侧的物品更新右侧的物品视图一个完整的文章。在手机上,但是,这两种成分应出现在单独的屏幕-从列表中选择的物品改变整个屏幕以显示物品。有两种方法来完成这个设计片段:
多个片段,一个活动:使用一个活动无论设备的大小,但在运行时决定是否在布局片段组合(创建多窗格设计)或交换片段(创建一个单一的窗格设计)。要么...
多个片段,多重活动:在平板电脑上,将多个片段在一个活动;在手机上,使用单独的活动举办的每个片段。例如,当片剂设计中的活性使用两个片段,用于手机相同的活性,但提供一个替代的布局只包括第一片段。当在手机上运行,??你需要切换片段(当用户选择一个项目,如),开始承载第二个片段的另一个活动。
您选择的方法取决于你的设计和个人喜好。第一个选项(一个活动,交换片段),您需要确定屏幕尺寸在运行时动态地在您的活动的XML添加的每个片段作为适当的,而不是申报片段布局,因为你不能从活动中删除片段,如果它已经在XML布局声明。当使用第一种技术,可能还需要每次片段更改更新操作栏,取决于什么行动或导航模式可用于每个片段。在某些情况下,这些因素可能不会影响您的设计,因此使用一个活动和交换片段可以工作(特别是如果你的平板电脑的设计需要您动态添加片段反正)。其他时候,然而,动态交换片段为您的手机设计可以使你的代码变得更加复杂,因为你必须管理在活动的代码中的所有片段组合(而不是使用替代布局资源来定义片段组合)和管理片段回栈自己(而不是允许正常活动栈处理回导航)。
本指南重点介绍了第二个选项,在其中您在一个单独的活动时更小的屏幕上显示的每个片段。使用这种技术意味着你可以使用不同的屏幕大小定义不同的片段组合替代的布局文件,保持片段代码模块化,简化了操作栏的管理,并让系统在手机上全部回栈工作。
图1展示了如何用两个片段应用程序可能被安排为手机和使用手机设计不同的活动时,片:
图平板电脑和手机1.不同的设计模式,在选择项目时要查看其详细信息。
在图1所示的应用程序,活动A为“主活动”,并使用不同的布局的时间,以显示一个或两个片段取决于屏幕的尺寸:
在平板电脑大小的屏幕,活动布局包含片段A和B.片段
在手机大小的屏幕,活动布局中只包含片段A(列表视图)。为了显示在片段B的细节,活动B必须打开。
注:活动B是从来没有在平板电脑上使用。它仅仅是呈现片段B的容器中,所以仅在手持装置中使用时,两个片段必须单独显示。
根据不同的屏幕尺寸,系统采用不同的main.xml布局文件:
对于手机RES /布局/ main.xml中:
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- "Fragment A" --> <fragment class="com.example.android.TitlesFragment" android:id="@+id/list_frag" android:layout_width="match_parent" android:layout_height="match_parent"/> </FrameLayout>
res/layout-large/main.xml
for tablets:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/frags"> <!-- "Fragment A" --> <fragment class="com.example.android.TitlesFragment" android:id="@+id/list_frag" android:layout_width="@dimen/titles_size" android:layout_height="match_parent"/> <!-- "Fragment B" --> <fragment class="com.example.android.DetailsFragment" android:id="@+id/details_frag" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
注意:虽然平板电脑上面的示例布局是基于“大”屏幕配置预选赛中,你也应该使用新的“最小宽度”大小限定,以更精确地控制在其系统应用你的手机或平板电脑的屏幕尺寸布局。请参阅侧栏以获取更多信息。
如何当用户从列表中选择一个项目取决于片段B是否是在布局中可用的应用程序响应:
如果片段B是在布局,活动一个通知片段B进行自我更新。
如果片段B不在布局,活动A开始活动B(它承载片段B)。
为了实现这种模式的应用程序时,你发展你的片段是高度条块分割很重要。具体来说,您应该遵循两个原则:
不要直接从另一个操纵一个片段。
记住,涉及内容片段的片段里,而不是把它在主机活动代码的所有代码。
为了避免直接调用从另一个片段,定义,它可以使用来提供事件对其宿主的活动,这实现回调接口的每个片段类的回调接口。当活动收到回调由于一个事件(例如用户选择列表项),在活动做出响应适当地基于当前片段配置。
例如,活动A从上面可以取决于它是否是使用这样的平板电脑或手机的布局处理项目选择:
public class MainActivity extends Activity implements TitlesFragment.OnItemSelectedListener { ... /** This is a callback that the list fragment (Fragment A) calls when a list item is selected */ public void onItemSelected(int position) { DisplayFragment displayFrag = (DisplayFragment) getFragmentManager() .findFragmentById(R.id.display_frag); if (displayFrag == null) { // DisplayFragment (Fragment B) is not in the layout (handset layout), // so start DisplayActivity (Activity B) // and pass it the info about the selected item Intent intent = new Intent(this, DisplayActivity.class); intent.putExtra("position", position); startActivity(intent); } else { // DisplayFragment (Fragment B) is in the layout (tablet layout), // so tell the fragment to update displayFrag.updateContent(position); } } }
当显示活动(活动B)启动时,它读取由意向提供的数据,并将其传递到显示片段(片段B)。
如果片段B需要提供一个结果返回给片段A(因为活动B开始与startActivityForResult()),则处理与片段B和活性B.也就是说之间的回调接口工作方式类似,活动B实现了一个不同的回调接口由片段B.当活动B接收与来自所述片段的结果回调定义,它设置的结果为活性(用的setResult()),并完成自身。活动A然后接收结果并将其传递到碎片A.
对于这种技术用于创建平板电脑和手机的不同片段组合的演示,看到蜂窝图库样张的更新版本。
使用操作栏
操作栏是在平板电脑和手机的Andr??oid应用的一个重要UI组件。为了确保操作栏适当的行为在所有的屏幕尺寸,则需要使用的动作条的API不增加复杂的定制是很重要的。通过使用标准的API的ActionBar来设计你的动作条,Android系统做所有的工作,以适应正常为不同的屏幕尺寸操作栏。下面是创建你的动作条时,需要遵循一些重要提示:
当设置为一个操作项菜单项,避免使用“总是”的价值。在你的菜单资源,用“ifRoom”为Android:showAsAction属性,如果你想的菜单项出现在动作条。但是,您可能需要“永远”的时候一个动作视图不提供溢出菜单中选择默认操作(即,它必须作为一个动作视图)。但是,你不应该使用“总是”不是一次或两次以上。当您希望的项目显示为一个操作项:“showAsAction机器人”在几乎所有其他情况下,用“ifRoom”作为值。迫使太多的操作项目进入操作栏可以创建一个杂乱的用户界面和操作项可以与其他动作条元素,如标题或导航项目重叠。
当添加行动项目与文字标题的操作栏,还提供了一个图标,在适当的时候,并宣布showAsAction =“ifRoom | withText”。这种方式,如果没有足够的空间的标题,但有足够的空间用于该图标,则可以仅使用的图标。
始终为您的行动项目提供标题,即使你不启用“withText”,因为用户可以通过该项目,标题文本进行了“长按”查看标题为“工具提示”,在出现短暂敬酒的消息。提供了一个标题也可访问性至关重要,因为屏幕阅读器朗读该项目冠军,即使不可见。
应尽可能避免在使用自定义导航模式。使用内置的标签和下拉导航模式时可能 - 它们设计,使该系统能适应他们的介绍,以不同的屏幕尺寸。例如,当宽度是两个标签和其他行动项目(如纵向手机)太窄,选项卡显示在操作栏下方(这被称为“堆积操作栏”)。如果你必须建立操作栏中的自定义导航模式或其他自定义的意见,对其进行全面测试在小屏幕上,并进行必要的调整,以支持一个狭窄的操作栏。
例如,下面的实物模型演示系统可适应如何根据可用的屏幕空间的行动吧。在手机中,只有两个行动项目契合,因此剩下的菜单项出现在溢出菜单(由于Android:showAsAction被设置为“ifRoom”)和标签出现在一个单独的行(堆叠操作栏)。在平板电脑上,采取更多的行动项目可适合在动作条等方面做了标签
图2.实物模型展示了如何基于可用的屏幕空间系统重新配置就行动起来吧成分。
使用拆分操作栏
当您的应用程序在Android4.0(API级别14)和更高的运行,有可供调用操作栏额外的模式,“拆分操作栏”。当您启用拆分操作栏,一个单独的酒吧出现在屏幕时显示活动狭窄的屏幕上运行的所有行动项目的底部(如人像手机)。拆分操作栏确保了空间的合理数量是提供给一个狭窄的屏幕上显示操作项目,也是留有余地的顶部导航和标题元素。
要启用拆分操作栏,只需添加uiOptions=“splitActionBarWhenNarrow”你的<活动>或<应用>清单元素。
在左侧导航选项卡图3.拆分操作栏;与应用程序图标和标题右侧禁用。
如果你想隐藏在顶部的主要动作吧,因为你使用内置的导航选项卡的拆分操作栏一起,呼吁setDisplayShowHomeEnabled(false)来取消操作栏中的应用程序图标。在这种情况下,现在所剩无几的主要行动起来吧,所以它消失,所有剩下的是顶部的导航选项卡,并在底部的操作项,如图3所示的第二个设备。
注意:虽然uiOptions属性是在Android 4.0的(API级别14)加入,你可以放心地将其包含在即使你的minSdkVersion被设置为“14”的值以保持与旧版本的Andr??oid兼容应用程序。当在旧版本上运行时,系统会忽略的属性,因为它不理解它。将它添加到你的清单中的唯一条件是,你必须编译你的反对,支持的API级别14或更高的平台版本的应用程序。只要确保你不公开使用的应用程序代码其它API不是由你的minSdkVersion属性所声明的版本支持。
使用“向上”导航
由于在Action Bar开发者指南中所讨论的,可以使用应用程序图标操作栏中,以方便用户导航在适当的时候,无论是作为一个方法来获得回“家”的活动(类似于点击一个网站上的标志)或作为方式向上导航应用程序的结构的层次结构。虽然似乎类似于在某些情况下,标准回到导航,向上导航选项提供了更加可预测的导航方法,其中用户可能已经从外部位置输入的情况下,诸如通知,应用程序插件,或不同的应用程序。
当在不同的设备不同的组合使用的碎片,它到你的了导航每个配置中的行为给予额外的考虑是非常重要的。例如,在手机上,你的应??用程序时显示在同一时间只有一个片段,它可能是适当的,以使上导航上去父画面,而它显示了一个多窗格配置相同的片段时,是没有必要的。
有关启用了导航的详细信息,请参阅操作栏开发人员指南。
其他设计技巧
当一个ListView工作,考虑如何你可能会提供基于可用空间每个项目或多或少的信息。也就是说,您可以创建替代布局将使用列表中的适配器的项目,使得大屏幕可能会显示每个项目的详细信息。
创建如整数,尺寸,甚至为布尔值替代资源文件。使用大小预选赛这些资源,可以方便地应用于不同的布局尺寸,字体大小,或启用/基于当前的屏幕大小禁用功能。