当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>
答案 0 :(得分:0)
YouTubePlayer.ErrorReason.UNAUTHORIZED_OVERLAY 错误表示由于视图覆盖播放器而导致播放停止。这意味着YouTube播放器已被其他视图所掩盖。 YouTube API可以检测到它并停止播放。
发生这种情况的一个非常常见的原因是用于保存YouTube播放器的片段嵌入在滚动视图中。滚动视图添加了可以滚动的附加元素层。因为在你的情况下。包含在同一声明中的播放器将检测重叠并最终停止给出上述错误。
答案 1 :(得分:0)
我在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播放器中的一个错误。我使用以下代码进行了解决方法:
@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将在旋转后滚动到不同的位置(稍后您可以手动重新重置)。