2015-08-08 79 views
0

当YouTube播放器片段嵌套在滚动型我得到的错误,当旋转装置景观:YouTube播放器,滚动型机器人

YouTubePlayer.ErrorReason.UNAUTHORIZED_OVERLAY 

什么是更有趣的是,当我删除的问题消失滚动型 !但我可以

<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

scrollview应该只有一个孩子 –

回答

0

YouTubePlayer.ErrorReason.UNAUTHORIZED_OVERLAY错误指示*播放已停止由于覆盖在播放机的视图。这意味着YouTube播放器已被其他一些视图所掩盖。 YouTube API可以检测到它并停止播放。

发生这种情况的一个常见原因是,用于保存YouTube播放器的片段嵌入滚动视图中。滚动视图添加了可以滚动的元素的附加层。对于你的情况。包含在同一声明中的播放器将检测到重叠,并最终停止提供上述错误。

0

我有同样的问题与滚动型的内部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将在旋转后滚动到不同的位置(您可以稍后重新手动重新设置)。