不能将ExoPlayer视图布局包含到另一个布局中

问题描述 投票:0回答:1

我正在尝试将ExoPlayer自定义XML布局文件包含到另一个XML布局文件中。

在运行应用程序时,由于ExoPlayer的“ PlayerView”而出现黑屏。

自定义ExoPlayer xml布局文件

        <?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">


    <com.google.android.exoplayer2.ui.PlayerView
        android:id="@+id/exoPlayerView"
        android:layout_width="match_parent"
        android:layout_height="500dp"/>

    <ImageButton android:id="@id/exo_play"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center"
        android:background="#CC000000"
        style="@style/ExoMediaButton.Play"/>

    <ImageButton android:id="@id/exo_pause"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center"
        android:background="#CC000000"
        style="@style/ExoMediaButton.Pause"/>


</merge>

我包含自定义ExoPlayer布局的XML布局

   <?xml version="1.0" encoding="utf-8"?>
 <androidx.constraintlayout.widget.ConstraintLayout
 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">


<include
    android:id="@+id/include"
    layout="@layout/exo_player_control_view"
    android:layout_width="200dp"
    android:layout_height="200dp"
    tools:layout_editor_absoluteX="90dp"
    tools:layout_editor_absoluteY="287dp">

</include>

当我从ExoPlayer自定义布局中删除“ PlayerView”时,该应用程序将完美运行。显然,“ PlayerView”会引起问题,但我可以弄清楚原因。

在此图片中,您可以看到它可以识别视图。

enter image description here

这是ExoPlayer自定义XML布局文件

enter image description here

android xml android-layout exoplayer
1个回答
0
投票

尝试此解决方案:

要在整个应用程序中自定义PlaybackControlView的布局,或仅针对某些配置,您可以在应用程序res / layout目录中定义exo_playback_control_view.xml布局文件。这些布局将覆盖ExoPlayer库提供的布局,并且会放大以供PlaybackControlView使用。

参考:https://github.com/google/ExoPlayer/blob/release-v2/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlaybackControlView.java

此外,要补充一点,您可以像这样:在PlayerView中指定自定义布局:

自定义ExoPlayer xml布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/black"
    android:visibility="visible">

    <ImageView
        android:id="@+id/btnClose"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="20dp"
        android:layout_marginRight="10dp"
        android:background="@drawable/app_gradient_round"
        android:padding="8dp"
        app:srcCompat="@drawable/ic_close" />

    <com.ui.view.MyCardView
        android:id="@+id/layoutFHostFront"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true">

        <com.google.android.exoplayer2.ui.SimpleExoPlayerView
            android:id="@+id/player_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:gravity="center"
            android:visibility="visible"
            app:controller_layout_id="@layout/layout_exo_player"
            app:hide_on_touch="false"
            app:show_timeout="0" />


    </com.ui.view.MyCardView>

</RelativeLayout>

layout_exo_player.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bg_music_tool_image"
    android:gravity="bottom"
    android:orientation="horizontal"
    android:visibility="visible">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center">

        <ImageButton
            android:id="@id/exo_play"
            style="@style/ExoMediaButton.Play"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:tint="#ffffff" />

        <ImageButton
            android:id="@id/exo_pause"
            style="@style/ExoMediaButton.Pause"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:tint="#ffffff" />

        <TextView
            android:id="@id/exo_position"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:includeFontPadding="false"
            android:text="00.00"
            android:textColor="#ffffff"
            android:textStyle="bold" />

        <com.google.android.exoplayer2.ui.DefaultTimeBar
            android:id="@id/exo_progress"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="0dp"
            android:layout_height="32dp"
            android:layout_weight="1"
            android:focusable="false"
            app:ad_marker_color="@color/colorPrimaryDark"
            app:buffered_color="@color/obaudiopicker_grid_line"
            app:played_color="@color/color_yellow"
            app:unplayed_color="@color/white" />

        <TextView
            android:id="@id/exo_duration"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:includeFontPadding="false"
            android:paddingLeft="4dip"
            android:paddingRight="4dip"
            android:textColor="#ffffff"
            android:textStyle="bold"
            tools:text="00.84" />
    </LinearLayout>
</LinearLayout>
© www.soinside.com 2019 - 2024. All rights reserved.