Android Exoplayer中PlayerView与StyledPlayerView有什么区别?
ExoPlayer PlayerView 与 StyledPlayerView 相关问题解答
基础XML示例
PlayerView
<com.google.android.exoplayer2.ui.PlayerView android:id="@+id/exoplayerView" android:layout_width="match_parent" android:layout_height="match_parent" app:controller_layout_id="@layout/layout_exoplayer_control_views" app:use_controller="true">
StyledPlayerView
<com.google.android.exoplayer2.ui.StyledPlayerView android:id="@+id/exoplayerView" android:layout_width="match_parent" android:layout_height="match_parent" app:controller_layout_id="@layout/layout_exoplayer_control_views" app:use_controller="true">
问题解答
1. 二者的核心差异是什么?
- 继承关系与定位:StyledPlayerView 是 PlayerView 的子类,是ExoPlayer 2.14版本之后推出的增强型组件;PlayerView属于基础原生组件,StyledPlayerView属于带官方样式封装的上层组件。
- 默认控制栏差异:PlayerView的默认控制栏是
PlayerControlView,仅支持基础播放控制功能,没有提供XML样式自定义属性,要修改样式只能完全替换控制布局;StyledPlayerView的默认控制栏是StyledPlayerControlView,默认遵循Material Design 2设计规范,自带大量可配置的XML属性,可直接修改控制栏背景色、按钮色调、进度条样式、圆角、间距等,无需替换整个布局。 - 内置特性差异:StyledPlayerView默认支持双击快进/快退、手势调节音量亮度、字幕样式自适应、画中画快捷适配等新特性,PlayerView默认不带这些能力,需要自行二次开发。
2. 二者分别适用于什么场景,应当如何选型?
- 选PlayerView的场景:
- 存量老项目已经基于PlayerView做了大量定制,没有升级样式的需求
- 需要完全自定义整套播放控制UI,完全不需要使用官方提供的默认控制栏样式和交互
- 对包体积有极致要求,不需要额外的样式相关资源
- 选StyledPlayerView的场景:
- 新项目开发,优先选择更新的StyledPlayerView,官方后续的新特性都会优先在这个组件上迭代
- 不需要完全自定义控制栏,只需要在官方默认样式基础上调整颜色、圆角等属性,能大幅减少开发量
- 需要用到双击快进快退、手势调节等官方内置特性,不想自行二次开发
- App整体设计风格符合Material Design 2/3规范,StyledPlayerView的默认样式和App风格适配成本更低
3. 两个组件都可以通过app:controller_layout_id自定义控制布局,为何要设计两种不同的播放器组件?
主要有两个核心原因:
- 向下兼容的要求:PlayerView作为早期就推出的基础组件,已经被大量存量项目使用,如果直接修改PlayerView的默认控制栏样式、新增内置交互逻辑,会导致老项目升级ExoPlayer版本时出现UI展示异常、原有交互逻辑断裂的问题,因此需要推出新的独立组件来承载新特性,不影响老用户的使用。
- 分层定位的需求:两个组件面向的开发者群体不同,PlayerView定位是纯基础组件,给需要高度自定义播放UI的开发者提供最轻量化的基础能力,不捆绑任何默认样式和交互;StyledPlayerView定位是开箱即用的播放器组件,给不需要深度定制的开发者提供默认符合设计规范、支持快速调整样式的上层封装,减少重复开发成本。这种拆分能覆盖不同的开发需求,也方便官方后续分开迭代维护。
内容的提问来源于stack exchange,提问作者Devrath
相关产品推荐
相关产品推荐

