YouTube播放器在ScrollView android



当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将滚动到一个不同的位置后旋转(你可以重新手动重置以后)。

相关内容

  • 没有找到相关文章

最新更新