私は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が次のとおりであることを示しています。
彼がこれをした誰かに?
どんな助けにも感謝します。
よろしく
この問題を解決できましたか?
私は今日同じ問題に直面しました、そして私にとってログのエラーは:
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" />
同じエラーが発生しました。 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..
FULLSCREENを設定した後、完全に機能しました
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
それが他の人を助けることを願っています。
問題はレイアウト、YouTube Player
は、非表示でも透明でも、ビューがその上にとどまることを許可しません。
これをデバイスで表示するには、開発者オプションでレイアウト境界を有効にします(paddings
およびmargins
で警告)
レイアウト上の他のビューのコードをコメント化して、これをもう一度テストしてみてください。
Youtubeプレーヤーは、いくつかのビューがそれにオーバーレイしていることを確認します。それらのビューまたはsetVisible(View.GONE)を削除するだけです。詳細については、このリンクを確認してください ソリューション
Android APIのデモコードは、フラグメントデモにこのレイアウトを使用します。アイデアを実現できるかもしれません。このページを参照してください。 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>
ビデオビューでパディング属性を削除する必要があります。
違う:
<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>
<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);