andorid程序同时支持手机 平板电脑

原文链接:http://developer.android.com/guide/practices/tablets-and-handsets.html#Guidelines


基本方针

这里有一些指导将会帮助您创建一个提供优化的用户体验应用程序,无论是在在平板电脑还是在手机上:

•* 在片段(fragmennts)基础上创建您的活动(activity)* 可以对不同组合重复使用——在多窗格布局的平板电脑或是单窗口布局的手机上。
一个Fragment代表了一种行为,或是活动中的用户界面的一部分。 你可以把一个片段作为一个活动的模块化部分(一个活动的“片段”),它有自己的生命周期,在活动运行时,你还可以添加或移除它。
如果你还没有使用过的片段,从阅读的Fragment开发人员指南开始吧。

•* 使用工具栏(action bar)* ,但得按照最佳做法,并确保您的设计非常灵活使得系统能根据屏幕的大小调整操工具栏布局。
ActionBar是用来取代活动(activity)中屏幕顶部传统标题栏的一个UI组件。 默认情况下,工具栏的左侧是应用程序标识(logo),其次是活动标题,右侧是 “选项”菜单上的项目。

您可以把选项菜单中的项目直接显示在工具栏中的“工具项目”中。 您还可以添加导航功能到工具栏,如标签或下拉列表中,并且使用应用程序的图标来补充系统返回按钮的行为,以导航到您的应用程序的“主界面(home)”或到达应用程序的结构层次的上层。
本指南提供了同时支持平板电脑和手机的工具栏使用方式的一些技巧。 欲知工具栏(action bar)API的详细讨论,请参阅的Action Bar开发人员指南。

•* 实现灵活的布局* ,正如在最佳实践(Best Practices)中对支持多屏幕的讨论, 要像网页设计师一样思考 (Thinking Like a Web Designer)。

一个灵活的布局设计让您的应用程序能够适应屏幕尺寸的变化。 正如平板电脑的尺寸不尽相同,手机也有着不同尺寸。尽管你可能会为“平板电脑”和“手机”提供不同的片段(fragment)组合,但使得每个设计都能够灵活调整其大小尺寸和高宽比仍然是必要的。
以下各节将会详细讨论前两个建议。 欲了解更多有关创建灵活的布局信息,请参阅上面提供的链接。

* 注:* 除了在工具栏的一个特点(译者按:指上面的最佳实践(Best Practices)和要像网页设计师一样思考 (Thinking Like a Web Designer)),所有的API需要完成本文档中的建议都可以在Android 3.0查询。 此外,您甚至可以实现片段的设计模式,并通过使用支持库来保持与Android 1.6的向后兼容,这些在下面的侧栏可以查询。

创建单窗格和多窗格布局

最有效的方法是要结合不同的方式来创建“单窗格中的”布局手机和“多窗格中的”布局片的片段,来优化您的手机和平板电脑的应用程序。例如,在平板电脑上的新闻应用程序可能会在左侧显示文章列表的,在右侧显示列表中所选择的文章内容。然而,在手机上,这两个部分应出现在单独的屏幕上,从列表中选择一篇文章标题后进入到全屏显示该文章。

有两种技术来实现这种设计的片段:
* 对于任何屏幕,其中显示您的平板电脑版本的多个片段,为手机使用相同的活动,但一次只显示一个片段 - 内活动,在必要时交换的片段。

* 在手机上使用单独的活动,主办每个片段。例如,当片剂UI使用一个活动的两个片段,适用于手持设备中使用的相同的活性,但提供一个替代的布局,包括只有一个片段。当你需要切换片段(例如,当用户选择一个项目),启动另一个活动举办的其他片段。

您选择的方法取决于您的应用程序的设计和个人喜好。在第一个选项(单个活动)需要你动态添加的每个片段的活性,在运行时---而不是宣布在您的活动的布局文件的片段 - 因为你可以不删除活动中的一个片段,如果它的已运行在XML布局中。您可能还需要更新操作栏中的每个时间片段的变化,这取决于什么样的行动或导航模式提供的片段。在某些情况下,这些因素可能不会影响到您的应用程序,因此,使用一个互动的碎片会使你的应用程序很好地工作。然而,在其他情况下,只使用一个互动交换片段也可以使你的代码更复杂,因为你必须管理所有活动的代码,而不是利用替代布局文件的片段组合。

本文谈的第二个选项,更详细。这可能是一个多一点的前期工作,必须很好地操作,因为每个片段分布在不同的活动,但它通常能使你的应用程序变的更好。这意味着你可以使用其他的布局文件定义不同的片段组合,保持片段代码的模块化,简化操作栏中的管理,让系统来处理所有的后退堆栈工作。

下图演示了如何可以安排使用单独的活动时,为手机设计的手机和平板电脑应用程序的两个片段:
http://developer.android.com/images/fundamentals/fragments.png

在这个程序,活动,一个是“主要活动”的时间,这取决于大小的屏幕上显示一个或两个片段,并使用不同的布局。一个手机大小的屏幕上时,布局只包含片段A(列表视图)的一个药片大小的屏幕上时,布局包含片段A和片段B.


注:活动B从来没有在平板电脑上使用。这是一个简单的容器呈现片段B,所以只用在手持设备的两个片段时,必须分别显示。


根据不同的屏幕尺寸,该系统适用于不同的main.xml的布局文件:
res/layout/main.xml 手机布局

<?xml version"utf-8"?>

<!-- "Fragment A" -->




res/layout-large/main.xml 平板布局:

<?xml version"utf-8"?>

<!-- "Fragment A" -->

<!-- "Fragment B" -->





Note: Although the above sample layout for tablets is based on the "large" screen configuration qualifier, you should also use the new "minimum width" size qualifiers in order to more precisely control the screen size at which the system applies your handset or tablet layout. See the sidebar for more information.

应用程序的响应,当用户从列表中选择一个项目,取决于是否是片段B在布局。如果片段B是存在的,活动通知片段B进行自我更新。如果片段B是A开始在布局,片段A主持片段B。

您的应用程序要实现这种模式,需要将你的片段高度条块分割,这一点很重要。具体而言,你应该遵循两个通用的准则:
• 请勿直接操作其他的某个片段。
• 保留所有代码,涉及的内容有子片段,而不是在主机活动的代码片段。

为了避免从一个片段中直接调用的另一个片段,在每个片段中,类声明一个回调接口,它可以使用事件传送给主机的活动,实现回调接口。当活动由于一个事件(例如用户选择的列表项)接收回调,适当地根据行为上为当前片段进行配置。

例如,从上面处理这样的活动选择项:

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);
    }
}



当DisplayActivity(活动)启动时,通过它的DisplayFragment(片段B)读取数据传递的意图。

如果片段B需要提供一个结果传回片段A,则该过程的工作方式类似于片段B和活动B的一个回调接口,活动B实现了一个回调接口,片段B.获得的回调,并完成自身活动。活动接收结果,并提供片段A.

对于一个完整的示范这项技术用于创建不同的片段组合为不同的平板电脑和手机,看看代码,此更新版本的 Honeycomb Gallery (ZIP文件)

在平板和手机上,Action bar对于Android应用来说是个重要的组件.为了确保为了确保Action Bar可以适应所有的屏幕分辨率,应用ActionBar的API而没有添加的定制。通过应用标准的ActionBar API设计你的工具栏,为了ActionBar 更好适应不同分辨率,Android系统做了很多工作。当你创建ActionBar时,这里有一些可供遵循重要的建议:

  • 当设置菜单项作为工具栏的子项时,避免用always值。在你的菜单资源里面如果你想 在你的菜单项出现在你的工具栏中,使用 "android:showAsAction"的"ifRoom"属性.然而 你可能需要"always"属性,当一个动作视图并不为溢出菜单(必须出现在动作视图中的) 提供一个默认的动作。但是你不能用always一次或两次以上。几乎在所有其他情况下, 当你想该条目作为一个动作项出现,使用"android:showAsAction"值为 "ifRoom"。 迫使太多的动作项到ActionBar中会导致混乱的UI,并且动作项会与其他的ActionBar部分重叠 像标题栏和导航栏。

  • 当用文本标题向ActionBar添加动作项时,提供了一个适当的并且声明了showAsAction="ifRoom|withText"的图标, 这样的话,如果标题没有足够的空间,但只有在图标应用的情况下,图标会有足够的空间。

  • 通常为你的动作项添加一个标题,即使你不启用“withText”,但是用户可以通过长按动作项查看标题,标题文本会 立刻出现在Toast信息中。提供标题对可访问性来说是必要的,因为屏幕阅读器会大声朗读项标题即使看不见

    • 如果可能的话尽量不用传统的导航模式。* 如果可能的话用built-in tab和 drop-down导航模式,他们是为了系统可以 适应他们对于不同屏幕分辨率的描述。例如,当宽度太窄了,这标签和其他的动作项(例如手机的竖屏),选项卡出现在 ActionBar(这被称为堆叠动作栏)下面。如果你一定要创建一个传统的导航模式或者其他的视图模式,完全在小的屏幕 上测试做任何必要的调整以支持一个狭窄的工具栏。

例如,下面的实物模型演示系统如何适应一个工具栏,可以基于可用的屏幕空间。在手机上只有两个动作项适用,剩余的菜单项 出现在溢出菜单中(因为android:showAsAction设置为ifRoom)以及选项卡独立出现一行(溢出工具栏)在平板电脑上,更多的动作项可以适合在动作栏和标签

http://developer.android.com/images/practices/actionbar-phone-tablet.png

图形2:Mock-up 展示系统再配置的工具栏组件基于可用的屏幕空间

应用分离Action Bar

当你的应用程序运行在Android4.0(API level 14)或者更高的版本,还有一个额外的模式可供操作栏称为“分隔工具栏”。当你用 分割工具栏时,一个分隔条会出现在屏幕的低部来展示所有的动作项,当Activity运行在窄的屏幕上(例如竖屏手机)。分隔工具栏确 保合理数量的空间可用来显示动作项目在一个狭窄的屏幕,在顶部还留出空间为导航和标题元素。 使用分割条,简单的添加uiOptions="splitActionBarWhenNarrow"在你的在manifest中

http://developer.android.com/images/practices/actionbar-phone-splitaction.png

图形3:左边是带有导航条的 Split action bar,右边是没有应用程序图标和标题

如果你想隐藏上面的主Action Bar,因为你正在应用内置的导航条以及分隔条,用 setDisplayShowHomeEnabled(false))方法来隐藏应用图标和ActionBar。这样,在主的ActionBar里面就没有东西了,因此所以它就消失了,剩下的是导航标签顶部和底部的动作项,如图所示的第二个设备在图3中。

注释:虽然,uiOptions属性在Android 4.0(API level 14)添加上了,你可以安全地将其包括在您的应用程序,即使你minSdkVersion设置为一个值低于“14“ 保持兼容旧的Android。当运行旧的版本时 ,该系统简单地忽略了属性,因为它并不识别他。唯一的条件添加到Manifest中 ,必须编译您的应用程序对平台的版本,它支持API级别14或更高。只是要确保在您的应用程序中不公开使用其他api不支持您声明的最小版本的代码。

应用“UP”导航

开发者指南中说道,您可以使用应用程序图标,方便用户操作栏导航当一个方法跳转到主界面(类似于在网站上点击logo),一个提高应用的机构层次。在其他情况下,她可能看起来像标准的黑色导航条,up navigation option 提供了up导航选项提供了一个更可预测的导航方法的情况下,用户可能已经进入了从外部位置像通知,桌面小组件或者一个其他的应用 当使用不同的组合碎片为不同的设备,重要的是要给予额外的考虑如何在每种配置了导航的行为。例如,当在手机上并且你的显示一次并且有一个片段它可能是合适的启用了导航到父屏幕,而这是没有必要的,在显示同样的片段在多窗格的配置。

更多关于up导航请参考ActionBar开发指南

其他的设计建议

  • 当使用Listview时,考虑你可能提供或多或少的信息在每个基于可用空间的选项里。也就是说你可以在你的列表适配器中,你可以创建每一个列表项使用复杂的布局 这样一个大的屏幕就可以为每个列表项展示更多的细节

  • 创建替代资源文件值,比如整数、尺寸、甚至是布尔值.使用这些资源的大小限定符,你可以很容易地应用不同的布局大小,字体大小,或启用/禁用特性根据当前的屏幕大小.


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值