Android 方向变化:不同的布局,相同的片段

2024-01-06

这几乎是一个经典的 Android 用例。

假设我们有 2 个片段:FragmentS 和 Fragment。

在横向模式下,FragmentA 和 FragmentB 并排放置。

在纵向模式下,它们在使用时都会占据全屏。

(See this image but replace tablet->landscape and handset->portrait) Different Layout, Same Fragments on Orientation Change

正如这里所解释的(支持单窗格和多窗格布局 http://developer.android.com/guide/practices/tablets-and-handsets.html#Fragments),有两种方法可以实现这一点:

1- 多个片段,一个活动:无论设备大小如何,都使用一个活动,但在运行时决定是在布局中组合片段(以创建多窗格设计)还是交换片段(以创建单窗格设计)。

2-多个fragment,多个activity:在平板电脑上,将多个fragment放置在一个activity中;在手机上,使用单独的活动来托管每个片段。例如,当平板电脑设计在一个活动中使用两个片段时,请对手机使用相同的活动,但提供仅包含第一个片段的替代布局。当在手机上运行时,您需要切换片段(例如当用户选择一个项目时),启动另一个托管第二个片段的活动。

这在理论上很有意义,但我在尝试以某种方式实际实施这两种方法时遇到了一些障碍当方向改变和按下后退按钮时恢复片段的状态.

我尝试了第一种方法并取得了很大的进展,但发现它很混乱,因为它需要手动管理所有片段事务,特别是因为片段的容器不能轻易更改。决定在返回按下时做什么也是很痛苦的,因为返回堆栈上的最后一个事务可能属于另一个方向。

现在我正在尝试第二种选择。到目前为止看起来更干净,但是每次方向更改时都会从头开始重新创建片段(因为每个方向使用不同的活动)。我希望有一种方法可以从其他活动/方向恢复片段状态。

谁能解释一下如何做到这一点,或者向我指出适当的教程或示例应用程序?


  • 将此配置添加到主要活动其中 Fragment 被替换<activity android:name=".MainActivity" android:configChanges="orientation|screenSize|keyboard|keyboardHidden" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT"/></intent-filter> </activity
  • You have create fragment landscape layout for FragmentA and FragmentB enter image description here
  • 如果您需要更改两个片段的行为,您应该更改配置更改时片段事件。

@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { //write your stuff for landscape orientation }else if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { //write your stuff for portrait orientation } }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 方向变化:不同的布局,相同的片段 的相关文章

随机推荐