【问题标题】:How do I prevent the reload of an Android WebView during an orientation change (nested fragments)?如何防止在方向更改(嵌套片段)期间重新加载 Android WebView?
【发布时间】:2016-01-20 22:05:10
【问题描述】:

我知道有人问过很多这样的问题,但我似乎遇到了任何重复问题都没有涉及的特定情况。

所以我先告诉你我的情况。我有一个包含另一个片段(WebViewFragment)的片段的活动。所以我有一个嵌套片段。 WebView 是VideoEnabledWebView。我使用它是因为我在 WebView 内的 html5 中有视频,我希望能够全屏显示。问题是:当您有全屏视频,然后更改设备的方向时,Activity 会重新启动,因此 WebView 重新加载导致视频关闭。然后我必须从头开始重新播放视频,才能以新的方向播放。我希望能够在不中断视频的情况下更改设备的方向。因此视频将保持全屏状态并从中断处继续播放。

根据 Android 文档,有两种方法可以处理方向更改:

  1. 自行处理配置更改

这是关于堆栈溢出问题的最流行的解决方案。我在清单中将 android:configChanges="keyboardHidden|orientation|screenSize" 插入到我的活动中。这可行,但我不能使用它,因为它会阻止整个 Activity 重新启动。因此,如果我处于纵向模式,则不会加载我的横向特定布局 xml 文件。也许有办法重新加载布局文件?但这一切听起来很老套,我不确定我还需要手动处理哪些其他事情,这通常由 Android 操作系统在配置更改期间自动完成。

  1. 在配置更改期间保留对象。

这对我来说是不可能的,因为您必须使用 setRetainInstance(true) 并且不能对子片段执行此操作。但是,有谁知道如果我在父片段上调用 ​​setRetainInstance(true) 是否会起作用?我目前正在对此进行测试,但我需要几个小时才能实现(因为我对 android 有点陌生)。在我浪费时间尝试一个可能不好的解决方案之前,任何人都可以验证这是否可行?与此同时,我会继续努力,并在我完成后告诉你它是否有效。

谢谢!

【问题讨论】:

  • 应该很容易测试 setRetainInstance 因为它是一行代码。所以值得一试。如何坚持视频在方向更改时暂停的地方然后恢复?我知道你可以在 webview 中加入并执行 javascript。
  • @cYrixmorten 我已经对其进行了测试,到目前为止,它似乎完全禁用了全屏视频,但我仍在调试以了解为什么 videoEnabledWebView 不喜欢 setRetainInstance(true)。我说这需要一段时间,因为它实际上不止一行,因为我必须通过我的 Activity 并确保我没有重新添加片段,但这实际上并没有花费太长时间(假设我做到了都正确)。 javascript的想法很好。这可能是我最后的手段。谢谢!

标签: android android-fragments webview


【解决方案1】:

在AndroidManifest.xml文件中添加“screenSize”属性:

<activity
android:name=".YourActivityName"
android:configChanges="orientation|screenSize">

希望它能解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 2014-04-16
    相关资源
    最近更新 更多