【发布时间】:2016-03-04 02:05:05
【问题描述】:
我有一个扩展AppCompatActivity 的活动,使用扩展Theme.AppCompat.Light.DarkActionBar 的主题。
此活动的视图是一个LinearLayout,方向为VERTICAL,包含以下视图:
-
包含
YouTubePlayerSupportFragment的FrameLayout。请注意,我在初始化成功时对获得的YouTubePlayer调用了以下方法:setPlayerStyle(PlayerStyle.CHROMELESS) addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_CUSTOM_LAYOUT)我还在播放器视图上设置了一个
onClickListener,应该根据需要隐藏和显示ActionBar。 另一个包含视频细节和内容的视图
- 一些底视图
请注意,活动调用supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_BAR_OVERLAY),并且LinearLayout 的顶部填充为android.support.v7.appcompat.R.attr.actionBarSize。
在AndroidManifest.xml 中,活动设置了android:configChanges="orientation|screenSize"。
在活动的onConfigurationChanged 方法中,我正在检查屏幕方向。如果是横向,我会“全屏”,如果是纵向,我会回到正常布局。
“全屏”是指:
- 将视图 n°2 和视图 n°3
visibility设置为View.GONE - 将活动的
supportActionBar背景颜色设置为一些透明颜色,如0x55000000 - 将
getWindow().getDecorView().systemUiVisibility设置为View.SYSTEM_UI_FLAG_FULLSCREEN - 更改视图 n°1
LayoutParams,将width和height都设置为MATCH_PARENT - 在
YouTubePlayer上拨打setFullscreen(true)
现在,当我在我的应用程序中时,一切都以纵向模式运行:视频播放,播放器正确放置在 ActionBar 下方。当进入横向模式时,它会继续按预期工作:除了播放器(甚至是ActionBar)之外,一切都消失了。然后我点击现在全屏的 YouTube 播放器。
预期的结果是ActionBar 出现,而不会中断播放。
实际结果是系统状态栏和ActionBar都出现了,播放中断,报如下错误:
由于播放器顶部出现未经授权的叠加,YouTube 视频播放停止。 YouTubePlayerView 被 android.support.v7.widget.ActionBarContainer{43744840 V.ED.... ........ 0,50-1280,162 #7f0d005b app:id/action_bar_container} 遮挡。视图位于 YouTubePlayerView 内部,遮挡视图的每个边缘与 YouTubePlayerView 之间的距离(以 px 为单位)为:左:0,上:50,右:0,下:558..
YouTubePlayer 应该让 ActionBar 覆盖它,如 Sample Applications 中的 Overlay ActionBar Demo 所示。那么这里有什么问题呢?我以为它只是检查覆盖它的视图是否是 ActionBar,所以我不明白这个确切的错误是怎么可能的!
【问题讨论】: