繁体   English   中英

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

[英]Supporting different screen sizes with dynamic or static fragments?

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

支持动态片段,这些片段是通过代码而不是嵌入式<fragment>元素类型添加的。 由于我不知道活动中xml的配置详细信息,因此如何用代码完成此操作。

有没有人举这个例子?

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

我可以预见使用动态片段的原因之一是支持保留片段,因此活动可以只在代码中要求它,但是我发现很难理解,如果活动(java)不能确切知道什么xml文件,将如何支持该片段。可用

谢谢

我发现通读并理解Android示例代码非常有用。

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

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

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

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

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

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

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

示例3:您有一个ViewPager,其中显示了很长的文章列表。 您向右或向左滑动即可浏览到上一篇/下一篇文章。 这些片段将在FragmentPagerAdapter内以编程方式创建; 您无法使用静态片段来做到这一点。

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

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

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

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

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

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

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

  4. 然后,基于布尔值,您可以决定仅在两个顶部的两个片段容器之间放置一个分片容器(单窗格布局),或者彼此相邻的两个片段容器之间进行充气(双窗格布局)。

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

我喜欢这个方法,因为它非常类似于Android,使用了values文件夹。 另外,您不必对现有的工作Fragment模式进行太多更改即可使其支持双窗格模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM