18

我在 Fragment 中使用 YouTubePlayer(Android 的 YouTube api)我用 YouTube 播放器为 LinearLayout 充气,以这种方式:

fragmentManager = getActivity().getSupportFragmentManager();
                    fragmentTransaction = fragmentManager.beginTransaction();

                    player = new YouTubePlayerSupportFragment();
                    fragmentTransaction.add(R.id.youTubePlayerContainer, player); 
                    fragmentTransaction.commit();

...youTubePlayerContainer 是膨胀的 LinearLayout

播放器被正确检测到,开始播放并在第二个停止。日志显示以下内容:

YouTube video playback stopped due to unauthorized overlay on top of player. 
The YouTubePlayerView is obscured by android.widget.FrameLayout@4110d1f8. 
YouTubePlayerView is completely covered, with the distance in px between each edge of the obscuring view and the YouTubePlayerView being: left: 484, top: 100, right: 100, bottom: 170..

这是我的 XML:(其中没有 FrameLayout)

 <LinearLayout
        android:id="@+id/curtain"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <LinearLayout
            android:id="@+id/withApi"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <LinearLayout
                android:id="@+id/youTubePlayerContainer"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_gravity="center"
                android:layout_margin="30dp"
                android:layout_weight="1"
                android:orientation="vertical" >
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="3dp"
                android:background="@color/trans_popUp"
                android:padding="3dp" >

                <TextView
                    android:id="@+id/textYouTubeVisor"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Title..."
                    android:textColor="@color/white" />
            </LinearLayout>
        </LinearLayout>

我尝试更改边距但没有成功。看了官方文档但是没有成功 表示导致问题的FrameLayout是:android.widget.FrameLayout@4110d1f8 但是有了这样的引用并不能识别是指哪个

对他做这件事的人?

我很感激任何帮助。

问候

4

8 回答 8

19

我今天遇到了同样的问题,对我来说,日志中的错误是:

W/YouTubeAndroidPlayerAPI﹕ YouTube video playback stopped due to unauthorized overlay on top of player. The YouTubePlayerView is not contained inside its ancestor com.google.android.youtube.player.YouTubePlayerView{42686bc8 V.E..... ........ 0,0-1200,675 #7f0a00a0 app:id/video_player}. The distances between the ancestor's edges and that of the YouTubePlayerView is: left: -10, top: -10, right: -10, bottom: -10 (these should all be positive).

我通过删除布局中 YouTubePlayerView 中的填充来解决此问题。所以我的布局是这样的:

<com.google.android.youtube.player.YouTubePlayerView
    android:id="@+id/video_player"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#000" />
于 2015-04-16T13:38:39.643 回答
7

我有同样的错误。虽然我做了 XML 更改,但我仍然收到错误:

 YouTube video playback stopped due to unauthorized overlay on top of player. The YouTubePlayerView is obscured by android.view.View{59fa6ce V.ED..... ........ 0,0-1440,84 #102002f android:id/statusBarBackground}. The view is inside the YouTubePlayerView, with the distance in px between each edge of the obscuring view and the YouTubePlayerView being: left: 0, top: 0, right: 0, bottom: 2308..

在我设置全屏后,它工作得很好

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

希望它会帮助别人。

于 2017-09-04T09:49:42.060 回答
5

问题仅在于布局,YouTube Player不允许任何视图停留在其上,既不可见也不透明。

为了使它在您的设备中可见,请在开发人员选项中启用布局边界。(使用paddings和警告margins

请尝试在您的布局上注释掉其他视图的代码并再次测试。

于 2013-12-08T20:29:42.873 回答
2

Android API 的演示代码在 Fragment 演示中使用了这种布局,也许这可以激发灵感。请参阅此页面:https ://developers.google.com/youtube/android/player/

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

  <TextView
      android:layout_width="match_parent"
      android:layout_height="0dp"
      android:layout_weight="1"
      android:textAppearance="@android:style/TextAppearance.Small"
      android:gravity="center"
      android:text="@string/playerfragment_text"/>

  <fragment
      android:name="com.google.android.youtube.player.YouTubePlayerFragment"
      android:id="@+id/youtube_fragment"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"/>
</LinearLayout>
于 2013-11-21T15:34:51.480 回答
2

Youtube 播放器找出一些覆盖它的视图。只需为它们删除那些视图或 setVisible(View.GONE) 即可。请查看此链接以获取更多 信息

于 2014-02-11T03:24:41.113 回答
1

您必须删除视频视图中的任何填充属性。

错误的:

   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" >

   <com.google.android.youtube.player.YouTubePlayerView
    android:id="@+id/youtube_player"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    **android:padding="10dp"** />

    </LinearLayout>

对:

   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <com.google.android.youtube.player.YouTubePlayerView
    android:id="@+id/youtube_player"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     />

    </LinearLayout>
于 2015-09-28T17:16:05.427 回答
0
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:id="@+id/id_base_layout"
android:fitsSystemWindows="true"
android:layout_height="match_parent"
android:background="#000000">

<com.google.android.youtube.player.YouTubePlayerView
    android:id="@+id/youtube_view"
    android:layout_width="match_parent"
    android:layout_centerInParent="true"
    android:layout_height="wrap_content"  />

1.添加fitSystemWindows。2.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

于 2018-05-14T06:32:38.793 回答
0

我在 youtubeplayer 中播放视频时遇到了同样的问题

当我添加此行时...它对我有用

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
于 2020-07-21T12:59:14.520 回答