ScrollView android中的YouTube播放器

时间:2015-08-08 21:04:36

标签: android youtube youtube-api

当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>

2 个答案:

答案 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将在旋转后滚动到不同的位置(稍后您可以手动重新重置)。