我试图解决这个问题,通过互联网搜索,没有找到真正的答案。
我正在开发一款需要YouTube播放器的应用。此播放器是YouTubePlayerSupportFragment
,因为它位于支持片段中(因此它也是嵌套的)。初始设置后,我意识到无论何时旋转手机,视频都会停止播放,必须重新启动。这显然不是我想要的。
然后我找到了一些SO答案(like this),其中人们说Activity需要处理配置更改,所以我将android:configChanges="keyboardHidden|orientation|screenSize"
添加到清单中的Activity。这解决了这个问题,视频现在即使在方向改变时仍然保持播放,并且全屏旋转看起来并不丑陋。很酷,我说,只是意识到这大大困扰了应用程序的其他部分因为配置现在正在所有视图到位后更新。这意味着如果我的手机处于纵向模式并且我将其旋转为横向,则所使用的布局仍将是肖像。
我找到了解决方案,建议在活动setContentView(...)
中调用onConfigurationChanged(...)
并重新填充碎片中的视图,但这似乎是一个相当麻烦的解决方案,因为它不仅仅是一个简单的内容设置我需要,片段需要保留(例如在RecyclerView
中滚动位置)。内置的setRetainInstance(true)
在这种情况下不起作用,因为视图也会重新创建,但是在调用onCreateView(...)
时配置仍然是旧的。
如果用户只在该屏幕(片段)上,但在其他任何地方保留了Activity,那么我会抓住configChanges
事件会很好。
不建议使用更多活动,由于UI / UX原因,我无法为此屏幕和应用程序的其余部分使用单独的活动。
答案 0 :(得分:3)
根据this YouTube Android播放器API指南
鼓励您处理由此引起的配置更改 手动定位您的活动,以避免重新创建 每次配置更改时片段的视图。为了最好 在用户体验方面,您还应手动处理全屏事件 通过更改活动的布局。(参见第二个approch)
由于您已经自行处理配置更改,我可以看到两个可能的解决方案。
YouTubePlayer
对象)设置为FULLSCREEN_FLAG_ALWAYS_FULLSCREEN_IN_LANDSCAPE
(这会导致播放器在设备进入横向时自动进入全屏。)与{{3}一起使用}(启用方向的自动控制。)flag。请注意,只有在您的活动被锁定时才应设置此标志 肖像(并在清单中指定)。
如果您没有横向布局,则该标志非常有用 活动,但希望仅为景观导向 全屏视频观看。
setFullscreenControlFlags
方法集FULLSCREEN_FLAG_CONTROL_ORIENTATION
中,禁用默认的全屏布局处理程序,使您可以手动控制到全屏布局的转换。除了使您能够实现自定义全屏布局之外,此选项还提供了避免在默认全屏行为中发生的重新缓冲的优势。应该确保实现自定义全屏行为的应用程序 两件事
玩家的视图占据了整个可用空间 每当调用onFullscreen(boolean)时,应用程序的窗口。那 当方向更改为时,不会重新创建活动 景观。为了实现支持肖像的活动,你 需要指定您的活动处理某些配置更改 在您的应用程序的清单中,包括方向, keyboardHidden和screenSize。
请参阅FULLSCREEN_FLAG_CUSTOM_LAYOUT
了解如何使用此标志。
根据我分享的第一个here,第二种方法将避免每次配置更改时重新创建片段的视图。您也不需要在setContentView(...)
中致电onConfigurationChanged(...)
。
希望这会对你有所帮助。