Android开发中如何调整ExoPlayer的字幕显示位置
ExoPlayer 字幕位置调整方案
可以调整ExoPlayer的字幕显示位置,你之前调用setBottomPaddingFraction和setPadding未生效,核心原因是ExoPlayer默认开启了分数内边距计算,会覆盖手动设置的布局参数,具体调整方法如下:
方法一:调整SubtitleView布局参数(推荐,适用于绝大多数场景)
- 如果你是单独引用的
SubtitleView控件,直接在XML布局中设置重力为顶部对齐,同时关闭分数内边距开关:
示例XML代码:
代码中额外配置:<com.google.android.exoplayer2.ui.SubtitleView android:id="@+id/subtitle_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="top" android:layout_marginTop="16dp" android:paddingHorizontal="12dp"/>// 关闭默认分数内边距,让手动设置的padding/margin生效 subtitleView.setFractionalPaddingEnabled(false); - 如果你使用的是封装好的
PlayerView,可以先获取内置的SubtitleView再修改布局参数:SubtitleView subtitleView = playerView.getSubtitleView(); subtitleView.setFractionalPaddingEnabled(false); // 修改布局参数,对齐到顶部 FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) subtitleView.getLayoutParams(); params.gravity = Gravity.TOP; // 这里的单位是px,建议根据设备密度转成dp后设置 params.topMargin = 32; subtitleView.setLayoutParams(params);
方法二:覆写内置字幕样式(适用于带样式的内嵌字幕)
如果你的字幕是内嵌在视频流中、自带位置样式,需要强制忽略原字幕的样式配置,再做调整:
// 关闭内嵌样式应用开关,优先使用自定义配置 subtitleView.setApplyEmbeddedStyles(false); // 自定义字幕的文字样式、对齐方式 CaptionStyleCompat style = new CaptionStyleCompat.Builder() .setTextSize(CaptionStyleCompat.TEXT_SIZE_TYPE_FRACTIONAL, 0.05f) .build(); subtitleView.setStyle(style); // 设置字幕文字居中 subtitleView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
方法三:自定义TextRenderer(适用于高度定制场景)
如果需要动态调整字幕位置、实现特殊交互,可以自定义TextRenderer子类,在render方法中修改字幕的绘制坐标,该方案复杂度较高,普通业务场景不推荐使用。
内容的提问来源于stack exchange,提问作者Masoud Mokhtari
相关产品推荐
相关产品推荐

