我试图了解如何使用 Fragments 创建能够很好地适应多个屏幕和布局的应用程序。我研究了几个例子:
- Android 开发者指南上的Fragments文档。
- 谷歌 IO 应用
- 来自ActionBar Sherlock的片段示例。
所有这些都提倡采用多种Activity
方法:
- 在大屏幕上,显示一个
Activity
与多个Fragment
s - 在较小的屏幕上,将 s 拆分为
Fragment
多个Activity
s。
我想到了另一种方法 -Activity
一个:
- 有一个
Activity
包含所有Fragment
s 的单曲。 - 根据屏幕尺寸和方向,显示/隐藏适当
Fragment
的 (s)(使用FragmentTransaction.show()
/FragmentTransaction.hide()
)。
为了说明与 Android 开发者指南使用的相同的“新闻文章列表/文章内容”示例:
- 让
News
活动同时包含 anArticleListFragment
和ArticleReaderFragment
。 - 在选项卡上,始终显示两个片段。
- 在电话上,
ArticleReaderFragment
最初是隐藏的。当从列表中选择一篇文章时,将ArticleListFragment
隐藏并ArticleReaderFragment
显示 。
有没有人使用过类似的方法?这种方法可能有任何实际的缺点吗?与多活动方式相比,它看起来更好/更差吗?例如,片段不能在 XML 中显示/隐藏 -必须FragmentTransaction
为此使用。
编辑 1:假设情景的描述
想象一个可以在屏幕上一次显示多达三个“窗格”的应用程序。此外,这些是要考虑的因素:
- 手机一次只能显示一个窗格(无论纵向/横向)
- 7 英寸平板电脑可以显示 2 个窗格,纵向拆分为纵向,横向拆分为横向。
- 10 英寸以上的平板电脑可以显示 2 个窗格,纵向拆分;3 个窗格横向水平拆分。
为简单起见,让我们将电视屏幕排除在讨论之外。
现在,将其转化为设计:
- 我们有三个片段:Frag1、Frag2 和 Frag3。
- 在最简单的情况下,所有三个片段都在一个 Activity 中(我们称之为 ActivityA)。这是 10 英寸横向机箱。
- 另一种“简单”的情况是当每个 Fragment 都在自己的 Activity 中时 - ActivityA 包含 Frag1;ActivityB 包含 Frag2,而 ActivityC 包含 Frag3。
到目前为止,我们还没有考虑任何与 Android 开发人员指南中介绍的新闻阅读器示例有显着差异的东西。唯一的主要区别是具有三个片段而不是两个。
现在,7 英寸标签的情况下只能容纳 2 个碎片。这将如何工作?请注意,这里有两种可能的组合:
- 正在显示 Frag1 和 Frag2。
- 正在显示 Frag2 和 Frag3。
我只是无法解决这个问题。我是否在 ActivityA 中完成所有这些操作?我只是创建一个全新的 ActivityD 吗?我需要创建多少个布局(我数了大约 8 个)?是不是变数太多了?
我确实意识到我上面提出的单一活动方法也可能不适合这种情况 - 因为显示/隐藏片段本身并不重要。
关于如何在不被布局和组合淹没的情况下处理这个问题的任何建议?