支持动态或静态片段的不同屏幕尺寸?

Posted

技术标签:

【中文标题】支持动态或静态片段的不同屏幕尺寸?【英文标题】:Supporting different screen sizes with dynamic or static fragments? 【发布时间】:2015-09-23 00:31:13 【问题描述】:

我发现能够使用片段支持多屏幕令人困惑。我认为我的想法是我可以提供多个版本的活动,并且该活动可以静态嵌入 1 个或多个片段(取决于房地产)。

支持动态片段,这些片段是从代码添加的,而不是嵌入的 <fragment> 元素类型。这将如何在代码中完成,因为我不知道活动中 xml 的配置详细信息。

有人有这方面的例子吗?

我什么时候使用静态或动态片段。

我可以预见使用动态片段的一个原因是支持片段上的保留,因此活动可以只在代码中请求它,但我发现很难理解如果没有活动 (java) 确切知道如何支持它有哪些 xml 文件可用

谢谢

【问题讨论】:

【参考方案1】:

我发现查看和理解android Samples 的代码非常有用。

这些示例项目通常很小,每个项目只关注 1 或 2 个主要概念。

如果您不想实际下载和安装示例项目,也可以在GitHub 上浏览源代码。

例如,在NavigationDrawer sample 中,NavigationDrawerActivity 类包含一个动态创建的 PlanetFragment 类。

【讨论】:

【参考方案2】:

使用“动态”片段有两个主要原因:

    您可以通过代码传递参数。例如,如果您有一个显示文章的片段,您可以通过代码创建片段并使用要显示的文章对其进行初始化(使用 Fragment.setArguments(Bundle) )。这相当于使用 Intent.putExtras() 将参数传递给 Activity。 您可以在同一个容器中交换不同的片段。

示例 1: 在您的主 Activity 中,您有一个包含 3 个部分的导航菜单。当用户选择一个新部分时,您在同一个 FrameLayout 容器中将 Fragment “Section A”替换为 Fragment “Section B”。

示例 2: 您在平板电脑上显示两个窗格布局(项目列表 + 详细信息)。每次用户在左侧列表中选择一个项目时,您都会创建一个新的 Fragment,为新项目初始化以显示并用新的 Fragment 替换右侧的现有 Fragment。

示例 3: 您有一个 ViewPager,它显示一长串文章。您向右或向左滑动导航到上一篇/下一篇文章。这些片段将在 FragmentPagerAdapter 内以编程方式创建;你不能使用静态片段来做到这一点。

【讨论】:

【参考方案3】:

要回答您有关如何使用动态片段实现双窗格的问题,方法如下:

    在您的资源中创建一个名为 values-land 的文件夹。在此文件夹中,添加一个 config.XML 文件,您将在其中拥有如下代码:

    <resources> <item type="bool" name="dual_pane">true</item> </resources>

    在“正常”值文件夹的 config.xml 文件中,添加以下代码:

    <resources> <item type="bool" name="dual_pane">false</item> </resources>

    在您的活动中,您可以在 onCreate() 中检测与您刚刚创建的景观配置对应的布尔值:

    getResources().getBoolean(R.bool.dual_pane);

    然后,根据布尔值,您可以决定使用两个片段容器在另一个顶部(单窗格布局)或两个彼此相邻的片段容器(双窗格布局)扩展布局。

    最后将您的片段动态添加到适当的容器中,瞧。

我喜欢这个方法,因为它很像 Android,通过使用不同的值文件夹。此外,您无需对现有的工作片段模式进行太多更改即可使其支持双窗格模式。

【讨论】:

以上是关于支持动态或静态片段的不同屏幕尺寸?的主要内容,如果未能解决你的问题,请参考以下文章

使用动态rem方案适配不同屏幕尺寸

如何在情节提要中使用自动布局在不同设备尺寸上设置动态位置的约束

Android官方开发文档Training系列课程中文版:多样屏幕之支持不同的屏幕尺寸

故事板iOS - 如何以屏幕尺寸的百分比而不是静态值顶部引脚边距给出上边距?

根据Android中的屏幕尺寸动态添加视图[关闭]

自动布局视图在不同的屏幕尺寸上总是相同的尺寸