当youtube播放器片段嵌套在ScrollView我得到错误时旋转设备横向:
YouTubePlayer.ErrorReason.UNAUTHORIZED_OVERLAY
更有趣的是,当我删除ScrollView时,问题消失了!但是我可以
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
/>
<fragment
android:name="com.google.android.youtube.player.YouTubePlayerFragment"
android:id="@+id/youtubeplayerfragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
</ScrollView>
YouTubePlayer.ErrorReason。UNAUTHORIZED_OVERLAY 错误指示*由于视图覆盖播放器而停止播放。这意味着YouTube播放器已经被它上面的一些其他视图遮蔽了。YouTube API可以检测到它并停止播放。
发生这种情况的一个非常常见的原因是,用于容纳YouTube播放器的片段嵌入在滚动视图中。滚动视图添加了额外的一层可以滚动的元素。对。在你的情况下。包含在相同声明中的玩家将检测到重叠,并最终停止给出上述错误。
我在ScrollView内部的YoutubePlayer有同样的问题,它停止了这个消息:
W/YouTubeAndroidPlayerAPI: YouTube video playback stopped due to unauthorized overlay on top of player. The YouTubePlayerView is not contained inside its ancestor android.widget.ScrollView{69b88e5 VFED.V... ........ 0,0-1794,1017 #7f0d0070 app:id/scrollview}. The distances between the ancestor's edges and that of the YouTubePlayerView is: left: 21, top: 196, right: 21, bottom: -164 (these should all be positive).
当视频在屏幕上不完全可见时,这种情况一直发生。当它完全可见时,旋转设备工作良好。对我来说,这看起来像是Youtube Android播放器的一个bug。我用下面的代码做了一个解决方案:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// This is an ugly workaround to prevent youtube from (wrongly) thinking we have an
// overlay above the video. Having overlays is not allowed and the video would stop otherwise.
DisplayMetrics metrics = getResources().getDisplayMetrics();
int offset = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 25, metrics);
scrollView.scrollTo(0, youtubePlayer.getView().getTop() - offset);
}
这显然不是一个很好的修复,因为它取决于视频的比例以及它在显示器上的显示方式。此外,你的ScrollView将滚动到一个不同的位置后旋转(你可以重新手动重置以后)。