碎片的使用策略外文翻译资料

 2022-01-11 10:01

英语原文共 12 页,剩余内容已隐藏,支付完成后下载完整资料


碎片的使用策略

碎片是你可以在活动和小部件之间放置的可选图层,旨在帮助你重新配置活动以支持大的(例如平板电脑)和小的(例如电话)屏幕。

本章将介绍碎片的基本用法,包括在Android 3.0之前的设备上支持碎片。

六个问题

在新闻界,任何新闻故事的基础都包含六个问题,即五个W和一个H。在这里,我们将应用这六个问题来帮助构建我们所讨论的关于碎片的内容。

碎片是什么?

碎片不是活动,但它们可以被活动使用。

碎片不是容器(即ViewGroup的子类),但通常它们会创建一个ViewGroup。

相反,你应该将碎片视为UI重用的单位。你可以使用布局和生命周期方法等定义碎片,就像你定义一个活动一样。但是,你可以根据需要在一个或多个活动中托管该碎片。

从功能上讲,碎片是Java类,从基础Fragment类扩展而来。 正如我们将看到的,Fragment类有两个版本,一个是API Level 11的原生版本,另一个是Android Support包提供的版本。

碎片在哪里??

由于碎片是Java类,因此碎片将存放在应用程序的一个Java包中。最简单的方法是将它们放在你用于项目整体和活动所在的Java包中,但是如果需要,你可以重构你的UI逻辑并放入另外一个包。

谁来实现碎片?!?

通常,你自己创建碎片实现,然后告诉Android何时使用它们。如果你愿意,某些第三方Android库项目可能会提供你可以重复使用的碎片实现。

何时使用碎片?!!?

一些开发人员开始在应用程序开发的最初阶段添加碎片——这将是我们在教程中采用的方法。而且,如果你从头开始新的应用程序,早期定义碎片可能是一个好主意。话虽这么说,我们完全可以“改造”现有的Android应用程序来使用碎片,尽管这可能增加很多工作。并且,我们完全可以创建没有碎片的Android应用程序。

碎片是在Android 3.0(API Level 11,a.k.a,Honeycomb)中引入的。

为什么要使用碎片?!?!?

啊!这是个大问题。如果我们设法在没有碎片的情况下通过本书实现这一目标,并且我们不一定需要碎片来创建Android应用程序,那讲碎片有什么意义呢?我们为什么要这么做呢?

碎片的主要原理是使其更容易支持多种屏幕尺寸。

Android开始支持手机时。手机会有许多不同尺寸的屏幕,从屏幕尺寸小于3英寸的微型电话(例如,索尼爱立信X10 mini)到超过5英寸的怪物(例如,三星Galaxy Note)。但是与手机和平板电脑或手机和电视之间的屏幕尺寸差异相比,屏幕尺寸的变化很小。

一些应用程序简单地扩展以填充更大的屏幕尺寸,许多游戏都采用这种方法,只是为用户提供更大的屏幕互动元素,更大的游戏板等。例如,流行的愤怒的小鸟游戏可以为你提供更大的鸟类元素。

然而,另一种设计方法是将平板电脑屏幕视为多个手机屏幕,将这些手机屏幕并排在一起。

图152:平板电脑与手机(图片由Android开源项目提供)

用户可以在平板电脑上一次访问所有这些功能,而他们在手机上则必须在不同屏幕之间来回切换。

对于可以适合此设计模式的应用程序,碎片允许你使用一个代码库支持手机和平板电脑。碎片可以被手机上的各个活动使用,也可以通过平板电脑的单个活动拼接在一起。

使用碎片支持大尺寸屏幕的详细信息是本书后面章节的主要内容。本章重点介绍基本的设置和使用碎片方法。

天啊!怎么使用?!?!??

那么,回答这个问题就是本章其余部分的内容,以及本书其他部分对更高级的碎片使用方法的介绍。

你的第一个碎片

在许多方面,通过查看具体的实现过程更容易解释碎片,而不是试图将它们作为抽象概念进行讨论。因此,在本节中,我们将看一下Fragments / Static示例。这和上一章的Activities / Lifecycle示例近乎一样。但是,我们已经将启动活动从直接托管小部件的活动转换为托管小部件的碎片,然后由碎片管理小部件。

项目

我们有两个碎片选择:使用API Level 11中的原生碎片,或使用Android Support包提供的。

我们还添加了ActionBarSherlock。使用碎片并不是严格要求的,无论这些碎片是本机API Level 11碎片还是来自Android Support包的碎片。但是,除了碎片之外,你可能还需要一个操作栏,在这种情况下,如果你使用的是反向移植的碎片实现,则需要使用ActionBarSherlock。此外,使用ActionBarSherlock碎片需要对代码进行一些小的更改,本项目将对此进行说明。

碎片布局

我们的碎片将管理我们的UI,因此我们有一个包含Button的res / layout / mainfrag.xml布局文件:

但请注意,我们不使用android:onClick属性。我们将解释为什么我们很快就从该示例的先前版本中删除了该属性。

碎片类

该项目有一个ContentFragment类,它将使用此布局并处理Button。这个类扩展了SherlockFragment - 来自ActionBarSherlock的Fragment实现,ActionBarSherlock本身继承自Android Support包中的android.support.v4.app.Fragment。如果你希望使用本机API Level 11碎片,则可以从android.app.Fragment继承。

与活动一样,典型的Fragment子类上没有构造函数。但是,你重写的主要方法不是onCreate()(正如我们将在本章后面看到的那样,这是可能的)。相反,要覆盖的主要方法是onCreateView(),它负责返回要为此碎片显示的UI:

我们传递了一个LayoutInflater,我们可以用它来扩展一个布局文件,ViewGroup最终会保存我们绘制的东西,以及传递给activity的onCreate()方法的Bundle。

在这里,我们对res / layout / mainfrag.xml进行了绘制,告诉Android它的内容最终将进入ViewGroup,但不会立即添加。虽然LayoutInflater上有更简单的inflate()方法,但如果ViewGroup恰好是RelativeLayout,则需要这个方法,因此我们可以适当地处理所有定位和大小。

我们还使用findViewById()来查找我们的Button小部件,并告诉它我们这个碎片是它的OnClickListener。然后,ContentFragment必须实现View.OnClickListener接口才能使其工作。我们这样做而不是使用android:onClick来实现Button 的click事件到碎片去,而不是到活动。

由于我们实现了View.OnClickListener接口,我们需要相应的onClick()方法实现:

任何碎片都可以调用getActivity()来查找托管它的活动。在我们的例子中,可能托管此碎片的唯一活动是StaticFragmentsDemoActivity,因此我们可以将getActivity()的结果转换为StaticFragmentsDemoActivity,以便我们可以在我们的活动上调用方法。特别的是,我们通过调用我们在原始的Activities / Lifecycle示例中看到的showOther()方法告诉活动显示其他活动(稍后会再次看到)。

这就是这个碎片真正需要的全部内容。但是,ContentFragment还会覆盖许多其他碎片的生命周期方法,我们将在本章后面对它们进行检查。

活动布局

最初,活动使用的res / layout / main.xml布局文件是我们使用Button小部件的地方。现在,Button由碎片处理。那么现在,我们的活动布局需要考虑碎片本身。

在此示例中,我们将使用静态碎片。静态碎片很容易添加到你的应用程序中,只需在布局文件中使用lt;fragmentgt;元素即可,例如我们修改的res / layout / main.xml布局文件

在这里,我们声明我们的UI完全由一个碎片组成,其实现(com.commonsware.android.sfrag.ContentFragment)由lt;fragmentgt;元素上的android:name属性标识。相比于android:name,你可以使用这个类,虽然大多数Android文档现在已切换到android:name。

如果需要,Eclipse用户可以将碎片拖出图形编辑器工具选项板的“Layouts”部分,而不是直接在XML中设置lt;fragmentgt;元素。

活动类

StaticFragmentsDemoActivity——我们的新启动活动——看起来与以前的版本相同,但类名除外:

但是,在新的LifecycleLogginggActivity中隐藏了一个更改。我们不再继承自Activity,而是继承自Sherlock FragmentActivity:

碎片驱动的活动有三个主要的基类:

  1. 如果你使用的是本机API Level 11碎片和操作栏,则可以像往常一样从普通的Activity类继承.
  2. 如果你正在为碎片使用Android支持包但未使用ActionBarSherlock(例如,你正在跳过API级别11之前的设备上的操作栏),则你将继承android.support.v4.app.FragmentActivity。这是Android Support包提供的支持碎片的活动基类。
  3. 如果你使用的是ActionBarSherlock,则继承自SherlockFragmentActivity。

结果

在视觉上,这个版本与前一版本没有区别,只是我们现在有一个操作栏:

图片153:Android 2.3.3上的静态片段

碎片的生命周期方法

碎片具有生命周期方法,就像活动一样。实际上,它们支持与活动相同的所有生命周期方法:

总的来说,相同的规则也适用于碎片,就像这些生命周期方法的活动一样(例如,可能不会调用onDestroy()方法)。

除了我们在本章前面讨论的那些和onCreateView()方法之外,如果你愿意,还可以选择覆盖其他四种生命周期方法。

onAttach()方法将首先被调用,甚至在onCreate()方法之前,让你知道你的碎片已被附加到一个活动。你将传递将托管你的碎片的活动。

onActivityCreated()方法将在onCreate()方法和onCreateView()方法之后调用,以表明活动的onCreate()方法已完成。如果你需要在碎片中初始化某些内容(取决于活动的onCreate()方法已完成其工作,则可以使用onActivityCreated()方法进行初始化工作。

在onDestroy()方法之前调用onDestroyView()方法。这是onCreateView()方法的对应部分,你可以在其中设置UI。如果你需要清理特定UI的内容,可以将该逻辑放在onDestroyView()方法中。

在onDestroy()方法之后调用onDetach()方法,以告知你已将你的碎片与其托管活动解除关联。

你的第一个动态碎片

一旦你需要Fragment实现,静态碎片就相当简单了:只需将lt;fragmentgt;元素添加到你希望碎片出现在activity活动布局中的位置。

然而,这种简单性确实带来了一些成本。我们将在下一章中回顾其中的一些限制。

可以通过使用动态碎片来克服这些限制。你不会通过布局中的lt;fragmentgt;元素向Android指示你希望使用碎片,而是使用FragmentTransaction从Java代码在运行时添加碎片。

考虑到这一点,请查看Fragments / Dynamic示例项目。

这是与静态碎片相同的项目,除了这次我们将调整OtherActivity来使用动态碎片,特别是ListFragment。

ListFragment类

ListFragment为活动提供与ListActivity相同的角色。它包含了ListView以方便使用。因此,为了有一个更有趣的OtherActivity,我们从一个ListFragment开始,它是一个ListFragment,旨在显示我们最喜欢的25个无意义的单词,如前面的例子中所示。

但是,由于我们在此项目中使用ActionBarSherlock,因此我们需要使用SherlockListFragm

全文共8117字,剩余内容已隐藏,支付完成后下载完整资料


资料编号:[1656]

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。