YouTube Android Player APIを使用しており、再生中の動画の上にコンテキスト情報とコントロールを表示するために、YouTubePlayerFragment
の上にビューをオーバーレイしたいと考えています。
残念ながら、レイアウト階層のプレーヤーの上に1つ以上のビューがスタックされている場合は常に、YouTubePlayerFragment
またはYouTubePlayerView
のいずれかで再生が正しく機能しないようです。再生は、すぐに一時停止する前に0.5秒未満発生します。
この問題は、SDKに付属しているSimplePlayerFragmentデモの次のレイアウトを使用して再現できます。
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<fragment
Android:name="com.google.Android.youtube.player.YouTubePlayerFragment"
Android:id="@+id/youtube_fragment"
Android:layout_width="match_parent"
Android:layout_height="match_parent"/>
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textAppearance="@Android:style/TextAppearance.Small"
Android:layout_alignParentTop="true"
Android:text="@string/playerfragment_text"/>
</RelativeLayout>
FrameLayout
とRelativeLayout
の両方を使用してさまざまなレイアウト構成を試しましたが、問題は常に同じです。このAPIは「実験的」としてリリースされていることを認識していますが、これが既知の問題である場合、多くの実装にとってかなり大きな障害になります。誰かが良い解決策や回避策を持っていますか?
ジェフ-これは設計どおりに機能します。 YouTubeプレーヤー(YouTube Android Playerを含む)を含む)へのオーバーレイはサポートされていません。オーバーレイが検出されると、再生が停止し、ログに問題のデバッグに役立つ情報が含まれます。アクションバーオーバーレイをサポートします。詳細については、このデモをご覧ください: https://developers.google.com/youtube/Android/player/sample-applications#Overlay_ActionBar_Demo 。
Youtube Playerは、ビューのオーバーレイを許可しません。すべてのビューにsetVisibility(View.GONE)を使用するだけでオーバーレイされます。
Googleが指定したように、プレーヤーの上にオーバーレイとしてボタンを追加することはできません。そうしないと、プレーヤーは停止します。
ビデオの再生中、このビューの最小サイズは200x110dpであることに注意してください。ビューをこれより小さくすると、ビデオの再生が自動的に停止します。また、ビデオの再生中にビューを他のビューとオーバーレイすることは許可されていません。
このビューはパディングをサポートしていません。同じ効果を得るには、ビューを別のViewGroupでラップするか、マージンを与えます。
パディングはYouTubePlayerでもサポートされていません。
ビデオにビューをオーバーレイするには、ExoPlayerを使用することをお勧めします。これはAndroid sdkの一部ではありません、しかしそれはグーグルによって推奨され、Android開発者向けドキュメントに含まれています:
http://google.github.io/ExoPlayer/
ExoplayerがYouTubeアプリケーションで使用されていることにも言及しておくとよいでしょう。
プレーヤーのテーマをYouTubePlayer.PlayerStyle.CHROMELESSに設定してから、以下で独自のコントロールを実装できます。
カスタムレイアウトでシークバーを再実装する方法に関する適切なリソースが見つからないという問題があります。
ヴォッラ!!この問題がデバイスLollipop以降で発生し、ステータスバーが原因であるというシナリオが1つあります。解決したステータスバーの問題を非表示にします。それが他の人を助けるなら、答えとしてそれを書いただけです:)