gpt4 book ai didi

android - 以暂停时的相同方向恢复 Activity ?

转载 作者:行者123 更新时间:2023-11-29 00:23:02 25 4
gpt4 key购买 nike

我想问一下下面的行为是否可能,如果可能,我该如何实现。出于非常具体的原因,我需要这种行为。

我有两个 Activity ,我将它们称为 Activity A 和 Activity B。现在让我们看一下这个例子:

从 Activity A 开始,我以纵向方式启动 Activity B(具有固定的横向方向)。当 Activity B 横向显示时,用户显然会旋转设备。 Activity B 结束, Activity A 重新开始。用户将设备保持在横向,因此 Activity A 的方向将在恢复后立即更改。

我想要的是避免 Activity A 的方向在用户返回时改变。我想在它的最后一个方向上恢复 Activity A,并且只允许在那之后改变方向。

锁定方向不是一个选项,因为我想让用户随时更改它。

android:configChanges="orientation|screenSize"解决方案都不是一个选项,因为我希望在方向更改后重新创建我的 Activity 。

我可以选择实现我想要的吗?

谢谢!

编辑: 我忘了说在 Activity A 被销毁之前保存当前方向并在再次创建时恢复它也不是一个选项。 Activity B 完成后不应重新创建 Activity A。

编辑 2:我现在在想,我意识到我可以从另一个角度重写这个问题。

我想避免在 Activity B 完成后恢复时重新创建 Activity A。

Afaik,当设备方向发生变化时,一条消息将发送到 ActivityThread(值为 RELAUNCH_ACTIVITY)。这会导致使用新的屏幕方向重新创建 Activity A。

我想避免 Activity A 重新启动,因为这会解决我的问题并保持它的最后方向。

最佳答案

我认为不可能像您描述的那样做到这一点。当用户从横向 Activity 返回到您之前的 Activity 时,您需要将方向锁定为纵向(以忽略手机现在所处的横向)。现在,如果用户旋转手机,您将看不到旋转,也无法更改方向。由于您无法真正判断用户是刚刚旋转了手机,还是旋转是由于从横向 Activity 中返回,因此您无法区分这两种情况。

但是,假设您能以某种方式区分这两种情况,请尝试以下操作:

如果您不希望 Android 在方向改变时重新创建您的 Activity(即使只是在某些情况下),那么您需要通过设置告诉 Android 您想要自己处理方向改变

android:configChanges="orientation|screenSize"

在 list 中。

现在您需要实现 onConfigurationChanged() 以获得您想要的行为。如果您的 Activity 启动了另一个固定方向的 Activity,您需要在启动该 Activity 之前保存当前屏幕方向。当用户返回您的 Activity 时,Android 不会销毁它并创建一个新实例,它只会调用 onConfigurationChanged()。当您收到 onConfigurationChanged() 调用时,您需要检查用户是否刚刚旋转了设备,或者这是否是从方向锁定 Activity 返回的结果。如果这是启动另一个 Activity 后返回的情况,您可以通过调用 setRequestedOrientation() 将屏幕方向锁定为之前的方向。如果用户只是旋转手机,您可以:

  • 通过调用 Activity.recreate() 重新创建 Activity 注意:这仅在您运行 API 级别 11 或更高级别时有效
  • 通过调用您自己的方法重新创建 Activity ,该方法基本上执行重新创建 View 所需的一切(调用 setContentView())并重置您的成员变量,就好像重新创建 Activity 一样
  • 通过再次启动 Activity 来重新创建 Activity :startActivity(new Intent(this, this.class) 然后调用 finish() 以摆脱当前实例.

关于android - 以暂停时的相同方向恢复 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21798561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com