切换活动时出现问题&当方向发生变化时,某些设备尺寸上的碎片。在我的情况下,它是large
屏幕,但可能会出现其他屏幕尺寸,具体取决于应用程序。我四处寻找答案,但似乎没有什么能正确解决这个问题。
我有两个活动,MainActivity和SubordinateActivity。 MainActivity是应用程序的唯一入口点; MainActivity启动SubordinateActivity。每个活动都有自己的片段,MainFragment和SubordinateFragment。在normal
设备上运行时,无论方向如何,屏幕上一次只有一个片段有足够的空间。在这种情况下,每个活动都将管理自己的片段。在xlarge
设备上,无论方向如何,都有足够的空间容纳两个片段。在这种情况下,有不同的布局文件允许屏幕上有两个片段。 MainFragment和SubordinateFragment都由MainActivity管理(从不使用SubordinateActivity)。
large
屏幕出现问题。使用横向方向,有足够的空间容纳两个碎片,但纵向方向则没有。我有适当的布局文件。在横向模式下,MainActivity管理两个片段(与xlarge
设备一样),在纵向模式下,每个活动管理自己的片段(与normal
设备一样)。这会在两种情况下产生问题:
这个问题的一个很好的例子是GMail应用程序。以下是该应用程序的一些屏幕截图,以防不清楚我在说什么。我意识到GMail应用程序的UI实际上比我的更复杂,但问题是一样的。
我确信这是其他人遇到的问题,因为GMail开发人员也遇到了这个问题。我无法弄清楚良好解决方案是什么,因为每种可能性似乎都涉及违反Android UI最佳实践,或者在Activity代码和XML布局之间创建一些不合理的纠结。
以下是我的一些想法,其中没有一个看起来非常正确:
large
设备上执行,这意味着混合代码可以检查活动代码中可用的布局。normal
大小的设备上,它可以根据需要交换MainFragment和SubordinateFragment。最后我不认为这解决了问题,因为MainActivity仍然依赖于布局文件来告诉它显示哪些和多少片段。这也违反了活动代表用户所做的独立事情的原则。以下是我一直在努力解决此问题的一些资源。正如我所说,这似乎是一个常见的问题,但似乎没有规范的Android解决方案。这是一个缺点,因为文档建议使用Fragments,而每个开发人员都会遇到这个问题。
摘要:我的多窗格模式适用于xlarge
设备。我试图解决的问题是在large
设备上切换单窗格(纵向)和多窗格(横向)模式,这些设备只能处理横向多个窗格。
答案 0 :(得分:3)
终止SubordinateActivity
并让应用中的唯一入口点为MainActivity
,然后决定使用MainFragment
或SubordinateFragment
填充整个视口。您可以通过looking at the developer docs for the design guide you linked to找到有关如何执行此操作的示例。
执行此操作后,您可以创建特定于大型和横向的资源文件夹res/layout/large-land
as stated here,并为MainActivity
设置布局文件,以包含两个类似于课程的片段# 2,在上一段的链接中。
创建它,与普通的XML布局一起更改为该文档中描述的内容应该自动处理您所描述的所有内容,因为方向更改在技术上是一种活动重新创建。