Pau*_*den 7 user-interface android screen-orientation android-layout android-fragments
当方向发生变化时,我在某些设备尺寸上切换活动和片段时遇到问题.在我的情况下它是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仍然依赖于布局文件来告诉它显示哪些和多少片段.这也违反了Activity表示用户所做的离散事物的原则.以下是我一直在努力解决此问题的一些资源.正如我所说,这似乎是一个常见的问题,但似乎没有规范的Android解决方案.这是一个缺点,因为文档建议使用Fragments,而每个开发人员都会遇到这个问题.
简介:我有多窗格模式适用于xlarge设备.我试图解决的问题是在large只能处理横向多个窗格的设备上切换单窗格(纵向)和多窗格(横向)模式.
KillSubordinateActivity并在应用程序中拥有唯一的入口点,然后决定用或MainActivity填充整个视口。您可以通过查看链接到的设计指南的开发人员文档来找到有关如何执行此操作的示例。MainFragmentSubordinateFragment
执行此操作后,您可以创建一个特定于大型和横向的资源文件夹,res/layout/large-land 如此处所述,并设置布局文件以MainActivity包含两个类似于上一段链接中的第 2 课的片段。
创建该布局以及将常规 XML 布局更改为该文档中描述的内容应该会自动处理您所描述的所有内容,因为从技术上讲,方向更改是活动重新创建。