修改控制组件的样式
属性 controller_layout_id
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.media3.ui.PlayerView
android:id="@+id/player"
android:layout_width="match_parent"
app:show_buffering="when_playing"
app:use_controller="true"
app:controller_layout_id="@layout/exo_player_control_view"
app:auto_show="true"
android:layout_height="300dp"/>
</RelativeLayout>
这个exo_player_control_view 布局是有讲究的注意<merge> 标签
先下载源码方便看布局
https://github.com/androidx/media
更换 controller_layout_id其实就是更换 PlayerControlView
进入到PlayerControlView的源码
image.png
看到布局是这样的
image.png
放进我们的项目改一个颜色试试看
image.png
跑起来的样式是
image.png
image.png
image.png
控制组件精简后:
image.png
<?xml version="1.0" encoding="utf-8"?><!-- Copyright 2020 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<merge xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 0dp dimensions are used to prevent this view from influencing the size of
the parent view if it uses "wrap_content". It is expanded to occupy the
entirety of the parent in code, after the parent's size has been
determined. See: https://github.com/google/ExoPlayer/issues/8726.
-->
<View
android:id="@id/exo_controls_background"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@color/exo_black_opacity_60" />
<!--android:background="@color/exo_bottom_bar_background"-->
<!-- android:layout_height="@dimen/exo_styled_bottom_bar_height" -->
<FrameLayout
android:id="@id/exo_bottom_bar"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_gravity="bottom"
android:layout_marginTop="@dimen/exo_styled_bottom_bar_margin_top"
android:background="#ff0000">
<LinearLayout
android:gravity="center_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
tools:ignore="UselessParent">
<TextView
android:layout_gravity="center_vertical"
android:id="@id/exo_position"
style="@style/ExoStyledControls.TimeText.Position" />
<androidx.media3.ui.DefaultTimeBar
android:layout_gravity="center_vertical"
android:id="@id/exo_progress"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"/>
<TextView
android:layout_gravity="center_vertical"
android:id="@id/exo_duration"
style="@style/ExoStyledControls.TimeText.Duration" />
</LinearLayout>
<!-- <LinearLayout android:id="@id/exo_time"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:paddingStart="@dimen/exo_styled_bottom_bar_time_padding"-->
<!-- android:paddingEnd="@dimen/exo_styled_bottom_bar_time_padding"-->
<!-- android:paddingLeft="@dimen/exo_styled_bottom_bar_time_padding"-->
<!-- android:paddingRight="@dimen/exo_styled_bottom_bar_time_padding"-->
<!-- >-->
<!-- <TextView android:id="@id/exo_position"-->
<!-- style="@style/ExoStyledControls.TimeText.Position"/>-->
<!-- <TextView-->
<!-- style="@style/ExoStyledControls.TimeText.Separator"/>-->
<!-- <TextView android:id="@id/exo_duration"-->
<!-- style="@style/ExoStyledControls.TimeText.Duration"/>-->
<!-- </LinearLayout>-->
<!-- <LinearLayout android:id="@id/exo_basic_controls"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:layoutDirection="ltr">
<ImageButton android:id="@id/exo_vr"
style="@style/ExoStyledControls.Button.Bottom.VR"/>
<ImageButton android:id="@id/exo_shuffle"
style="@style/ExoStyledControls.Button.Bottom.Shuffle"/>
<ImageButton android:id="@id/exo_repeat_toggle"
style="@style/ExoStyledControls.Button.Bottom.RepeatToggle"/>
<ImageButton android:id="@id/exo_subtitle"
style="@style/ExoStyledControls.Button.Bottom.CC"/>
<!– <ImageButton android:id="@id/exo_settings"
style="@style/ExoStyledControls.Button.Bottom.Settings"/>
–>
<ImageButton android:id="@id/exo_fullscreen"
style="@style/ExoStyledControls.Button.Bottom.FullScreen"/>
<ImageButton android:id="@id/exo_overflow_show"
style="@style/ExoStyledControls.Button.Bottom.OverflowShow"/>
</LinearLayout>
<HorizontalScrollView android:id="@id/exo_extra_controls_scroll_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:visibility="invisible">
<LinearLayout android:id="@id/exo_extra_controls"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layoutDirection="ltr">
<ImageButton android:id="@id/exo_overflow_hide"
style="@style/ExoStyledControls.Button.Bottom.OverflowHide"/>
</LinearLayout>
</HorizontalScrollView>-->
</FrameLayout>
<!-- <View android:id="@id/exo_progress_placeholder"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="@dimen/exo_styled_progress_layout_height"-->
<!-- android:layout_gravity="bottom"-->
<!-- android:layout_marginBottom="@dimen/exo_styled_progress_margin_bottom"/>-->
<!-- <LinearLayout android:id="@id/exo_minimal_controls"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_gravity="bottom|end"-->
<!-- android:layout_marginBottom="@dimen/exo_styled_minimal_controls_margin_bottom"-->
<!-- android:orientation="horizontal"-->
<!-- android:gravity="center_vertical"-->
<!-- android:layoutDirection="ltr">-->
<!-- <ImageButton android:id="@id/exo_minimal_fullscreen"-->
<!-- style="@style/ExoStyledControls.Button.Bottom.FullScreen"/>-->
<!-- </LinearLayout>-->
<LinearLayout
android:id="@id/exo_center_controls"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@android:color/transparent"
android:clipToPadding="false"
android:gravity="center"
android:layoutDirection="ltr"
android:padding="@dimen/exo_styled_controls_padding">
<!-- <ImageButton android:id="@id/exo_prev"-->
<!-- style="@style/ExoStyledControls.Button.Center.Previous"/>-->
<!-- <include layout="@layout/exo_player_control_rewind_button" />-->
<ImageButton
android:id="@id/exo_play_pause"
style="@style/ExoStyledControls.Button.Center.PlayPause" />
<!-- <include layout="@layout/exo_player_control_ffwd_button" />-->
<!-- <ImageButton android:id="@id/exo_next"-->
<!-- style="@style/ExoStyledControls.Button.Center.Next"/>-->
</LinearLayout>
</merge>
修改播放器 loading的颜色
通过源码拿到布局文件 给PlayerView设置上
源码中的布局文件
exo_player_view
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2020 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<androidx.media3.ui.AspectRatioFrameLayout android:id="@id/exo_content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center">
<!-- Video surface will be inserted as the first child of the content frame. -->
<View android:id="@id/exo_shutter"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"/>
<ImageView android:id="@id/exo_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:contentDescription="@null"/>
<ImageView android:id="@id/exo_artwork"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:contentDescription="@null"/>
<androidx.media3.ui.SubtitleView android:id="@id/exo_subtitles"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<ProgressBar android:id="@id/exo_buffering"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:layout_gravity="center"/>
<TextView android:id="@id/exo_error_message"
android:layout_width="wrap_content"
android:layout_height="@dimen/exo_error_message_height"
android:layout_gravity="center"
android:layout_marginBottom="@dimen/exo_error_message_margin_bottom"
android:gravity="center"
android:textColor="@color/exo_white"
android:textSize="@dimen/exo_error_message_text_size"
android:background="@drawable/exo_rounded_rectangle"
android:paddingLeft="@dimen/exo_error_message_text_padding_horizontal"
android:paddingRight="@dimen/exo_error_message_text_padding_horizontal"
android:paddingTop="@dimen/exo_error_message_text_padding_vertical"
android:paddingBottom="@dimen/exo_error_message_text_padding_vertical"/>
</androidx.media3.ui.AspectRatioFrameLayout>
<FrameLayout android:id="@id/exo_ad_overlay"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<FrameLayout android:id="@id/exo_overlay"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<View android:id="@id/exo_controller_placeholder"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</merge>
设置
image.png
image.png
image.png





网友评论