[leanback] add subtitle size setting

pull/137/head
FongMi 3 years ago
parent eadd6b6f0d
commit c01e0133cd
  1. 29
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  2. 25
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  3. 15
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java
  4. 62
      app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/SubtitleDialog.java
  5. 29
      app/src/leanback/res/layout/activity_setting_player.xml
  6. 59
      app/src/leanback/res/layout/dialog_subtitle.xml
  7. 8
      app/src/main/java/com/fongmi/android/tv/Setting.java
  8. 6
      app/src/main/java/com/fongmi/android/tv/impl/SubtitleCallback.java
  9. 1
      app/src/main/res/values-zh-rCN/strings.xml
  10. 1
      app/src/main/res/values-zh-rTW/strings.xml
  11. 1
      app/src/main/res/values/strings.xml
  12. 2
      ijkplayer/build.gradle
  13. 9
      ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java
  14. 62
      ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/SubtitleView.java
  15. 9
      ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/Util.java
  16. 15
      ijkplayer/src/main/res/layout/ijk_player_view.xml

@ -8,13 +8,13 @@ import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.text.Html;
import android.text.TextUtils;
import android.util.TypedValue;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.Dimension;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentActivity;
@ -51,6 +51,7 @@ import com.fongmi.android.tv.event.PlayerEvent;
import com.fongmi.android.tv.event.RefreshEvent;
import com.fongmi.android.tv.impl.Callback;
import com.fongmi.android.tv.impl.CustomTarget;
import com.fongmi.android.tv.impl.SubtitleCallback;
import com.fongmi.android.tv.model.SiteViewModel;
import com.fongmi.android.tv.player.ExoUtil;
import com.fongmi.android.tv.player.Players;
@ -59,6 +60,7 @@ import com.fongmi.android.tv.ui.adapter.QualityAdapter;
import com.fongmi.android.tv.ui.base.BaseActivity;
import com.fongmi.android.tv.ui.custom.CustomKeyDownVod;
import com.fongmi.android.tv.ui.custom.dialog.DescDialog;
import com.fongmi.android.tv.ui.custom.dialog.SubtitleDialog;
import com.fongmi.android.tv.ui.custom.dialog.TrackDialog;
import com.fongmi.android.tv.ui.presenter.ArrayPresenter;
import com.fongmi.android.tv.ui.presenter.EpisodePresenter;
@ -94,7 +96,7 @@ import okhttp3.Call;
import okhttp3.Response;
import tv.danmaku.ijk.media.player.ui.IjkVideoView;
public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Listener, TrackDialog.Listener, ArrayPresenter.OnClickListener, Clock.Callback {
public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Listener, TrackDialog.Listener, ArrayPresenter.OnClickListener, Clock.Callback, SubtitleCallback {
private ViewGroup.LayoutParams mFrameParams;
private EpisodePresenter mEpisodePresenter;
@ -296,6 +298,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
mBinding.control.ending.setOnClickListener(view -> onEnding());
mBinding.control.change2.setOnClickListener(view -> onChange());
mBinding.control.opening.setOnClickListener(view -> onOpening());
mBinding.control.text.setOnLongClickListener(view -> onTextLong());
mBinding.control.speed.setOnLongClickListener(view -> onSpeedLong());
mBinding.control.reset.setOnLongClickListener(view -> onResetToggle());
mBinding.control.ending.setOnLongClickListener(view -> onEndingReset());
@ -353,10 +356,10 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
}
private void setVideoView() {
mPlayers.set(getExo(), getIjk());
getExo().getSubtitleView().setUserDefaultTextSize();
getExo().getSubtitleView().setStyle(ExoUtil.getCaptionStyle());
getIjk().getSubtitleView().setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
getIjk().getSubtitleView().setStyle(ExoUtil.getCaptionStyle());
mPlayers.set(getExo(), getIjk());
setSubtitle(16);
}
private void setScale(int scale) {
@ -567,9 +570,9 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
private void enterFullscreen() {
mBinding.video.setForeground(null);
getIjk().getSubtitleView().setTextSize(TypedValue.COMPLEX_UNIT_SP, 24);
mBinding.video.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
mBinding.flag.setSelectedPosition(getCurrentFlag());
setSubtitle(Setting.getSubtitle());
mKeyDown.setFull(true);
setFullscreen(true);
onPlay();
@ -577,10 +580,10 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
private void exitFullscreen() {
mBinding.video.setForeground(ResUtil.getDrawable(R.drawable.selector_video));
getIjk().getSubtitleView().setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
mBinding.video.setLayoutParams(mFrameParams);
mKeyDown.setFull(false);
setFullscreen(false);
setSubtitle(16);
hideInfo();
}
@ -754,6 +757,12 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
hideControl();
}
private boolean onTextLong() {
SubtitleDialog.create(this).show();
hideControl();
return true;
}
private void onToggle() {
if (isVisible(mBinding.control.getRoot())) hideControl();
else showControl(mBinding.control.next);
@ -1305,6 +1314,12 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
if (isFullscreen()) onKeyCenter();
}
@Override
public void setSubtitle(int size) {
getExo().getSubtitleView().setFixedTextSize(Dimension.SP, size);
getIjk().getSubtitleView().setFixedTextSize(Dimension.SP, size);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);

@ -3,10 +3,10 @@ package com.fongmi.android.tv.ui.activity;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.util.TypedValue;
import android.view.KeyEvent;
import android.view.View;
import androidx.annotation.Dimension;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.leanback.widget.ArrayObjectAdapter;
@ -36,6 +36,7 @@ import com.fongmi.android.tv.event.PlayerEvent;
import com.fongmi.android.tv.impl.Callback;
import com.fongmi.android.tv.impl.LiveCallback;
import com.fongmi.android.tv.impl.PassCallback;
import com.fongmi.android.tv.impl.SubtitleCallback;
import com.fongmi.android.tv.model.LiveViewModel;
import com.fongmi.android.tv.player.ExoUtil;
import com.fongmi.android.tv.player.Players;
@ -45,6 +46,7 @@ import com.fongmi.android.tv.ui.custom.CustomKeyDownLive;
import com.fongmi.android.tv.ui.custom.CustomLiveListView;
import com.fongmi.android.tv.ui.custom.dialog.LiveDialog;
import com.fongmi.android.tv.ui.custom.dialog.PassDialog;
import com.fongmi.android.tv.ui.custom.dialog.SubtitleDialog;
import com.fongmi.android.tv.ui.custom.dialog.TrackDialog;
import com.fongmi.android.tv.ui.presenter.ChannelPresenter;
import com.fongmi.android.tv.ui.presenter.GroupPresenter;
@ -70,7 +72,7 @@ import okhttp3.Call;
import okhttp3.Response;
import tv.danmaku.ijk.media.player.ui.IjkVideoView;
public class LiveActivity extends BaseActivity implements GroupPresenter.OnClickListener, ChannelPresenter.OnClickListener, CustomKeyDownLive.Listener, CustomLiveListView.Callback, TrackDialog.Listener, Biometric.Callback, PassCallback, LiveCallback {
public class LiveActivity extends BaseActivity implements GroupPresenter.OnClickListener, ChannelPresenter.OnClickListener, CustomKeyDownLive.Listener, CustomLiveListView.Callback, TrackDialog.Listener, Biometric.Callback, PassCallback, LiveCallback, SubtitleCallback {
private ActivityLiveBinding mBinding;
private ArrayObjectAdapter mChannelAdapter;
@ -165,6 +167,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
mBinding.control.change.setOnClickListener(view -> onChange());
mBinding.control.player.setOnClickListener(view -> onPlayer());
mBinding.control.decode.setOnClickListener(view -> onDecode());
mBinding.control.text.setOnLongClickListener(view -> onTextLong());
mBinding.control.speed.setOnLongClickListener(view -> onSpeedLong());
mBinding.video.setOnTouchListener((view, event) -> mKeyDown.onTouchEvent(event));
mBinding.group.addOnChildViewHolderSelectedListener(new OnChildViewHolderSelectedListener() {
@ -196,15 +199,15 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
private void setVideoView() {
mPlayers.set(getExo(), getIjk());
setScale(Setting.getLiveScale());
getExo().getSubtitleView().setUserDefaultTextSize();
getExo().getSubtitleView().setStyle(ExoUtil.getCaptionStyle());
getIjk().getSubtitleView().setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
setSubtitle(Setting.getSubtitle());
mBinding.control.speed.setText(mPlayers.getSpeedText());
mBinding.control.invert.setActivated(Setting.isInvert());
mBinding.control.across.setActivated(Setting.isAcross());
mBinding.control.change.setActivated(Setting.isChange());
mBinding.control.home.setVisibility(LiveConfig.isOnly() ? View.GONE : View.VISIBLE);
findViewById(R.id.timeBar).setNextFocusUpId(R.id.player);
getExo().getSubtitleView().setStyle(ExoUtil.getCaptionStyle());
getIjk().getSubtitleView().setStyle(ExoUtil.getCaptionStyle());
}
private void setScale(int scale) {
@ -280,6 +283,12 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
hideControl();
}
private boolean onTextLong() {
SubtitleDialog.create(this).show();
hideControl();
return true;
}
private void onHome() {
LiveDialog.create(this).show();
hideControl();
@ -799,6 +808,12 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
else onMenu();
}
@Override
public void setSubtitle(int size) {
getExo().getSubtitleView().setFixedTextSize(Dimension.SP, size);
getIjk().getSubtitleView().setFixedTextSize(Dimension.SP, size);
}
@Override
protected void onResume() {
super.onResume();

@ -9,14 +9,16 @@ import androidx.viewbinding.ViewBinding;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.Setting;
import com.fongmi.android.tv.databinding.ActivitySettingPlayerBinding;
import com.fongmi.android.tv.impl.SubtitleCallback;
import com.fongmi.android.tv.impl.UaCallback;
import com.fongmi.android.tv.player.ExoUtil;
import com.fongmi.android.tv.player.Players;
import com.fongmi.android.tv.ui.base.BaseActivity;
import com.fongmi.android.tv.ui.custom.dialog.SubtitleDialog;
import com.fongmi.android.tv.ui.custom.dialog.UaDialog;
import com.fongmi.android.tv.utils.ResUtil;
public class SettingPlayerActivity extends BaseActivity implements UaCallback {
public class SettingPlayerActivity extends BaseActivity implements UaCallback, SubtitleCallback {
private ActivitySettingPlayerBinding mBinding;
private String[] http;
@ -39,6 +41,7 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback {
protected void initView() {
mBinding.uaText.setText(Setting.getUa());
mBinding.tunnelText.setText(getSwitch(Setting.isTunnel()));
mBinding.subtitleText.setText(String.valueOf(Setting.getSubtitle()));
mBinding.http.setVisibility(Players.isExo(Setting.getPlayer()) ? View.VISIBLE : View.GONE);
mBinding.tunnel.setVisibility(Players.isExo(Setting.getPlayer()) ? View.VISIBLE : View.GONE);
mBinding.flagText.setText((flag = ResUtil.getStringArray(R.array.select_flag))[Setting.getFlag()]);
@ -51,6 +54,7 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback {
mBinding.http.setOnClickListener(this::setHttp);
mBinding.flag.setOnClickListener(this::setFlag);
mBinding.tunnel.setOnClickListener(this::setTunnel);
mBinding.subtitle.setOnClickListener(this::onSubtitle);
}
private void onUa(View view) {
@ -75,9 +79,18 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback {
mBinding.tunnelText.setText(getSwitch(Setting.isTunnel()));
}
private void onSubtitle(View view) {
SubtitleDialog.create(this).show();
}
@Override
public void setUa(String ua) {
mBinding.uaText.setText(ua);
Setting.putUa(ua);
}
@Override
public void setSubtitle(int size) {
mBinding.subtitleText.setText(String.valueOf(size));
}
}

@ -0,0 +1,62 @@
package com.fongmi.android.tv.ui.custom.dialog;
import android.view.LayoutInflater;
import android.view.View;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentActivity;
import com.fongmi.android.tv.Setting;
import com.fongmi.android.tv.databinding.DialogSubtitleBinding;
import com.fongmi.android.tv.impl.SubtitleCallback;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
public class SubtitleDialog {
private final DialogSubtitleBinding binding;
private final SubtitleCallback callback;
private final AlertDialog dialog;
private int value;
public static SubtitleDialog create(FragmentActivity activity) {
return new SubtitleDialog(activity);
}
public SubtitleDialog(FragmentActivity activity) {
this.callback = (SubtitleCallback) activity;
this.binding = DialogSubtitleBinding.inflate(LayoutInflater.from(activity));
this.dialog = new MaterialAlertDialogBuilder(activity).setView(binding.getRoot()).create();
}
public void show() {
initDialog();
initView();
initEvent();
}
private void initDialog() {
dialog.getWindow().setDimAmount(0);
dialog.show();
}
private void initView() {
binding.slider.setValue(value = Setting.getSubtitle());
}
private void initEvent() {
binding.positive.setOnClickListener(this::onPositive);
binding.negative.setOnClickListener(this::onNegative);
binding.slider.addOnChangeListener((slider, value, fromUser) -> callback.setSubtitle((int) value));
}
private void onPositive(View view) {
callback.setSubtitle((int) binding.slider.getValue());
Setting.putSubtitle((int) binding.slider.getValue());
dialog.dismiss();
}
private void onNegative(View view) {
callback.setSubtitle(value);
dialog.dismiss();
}
}

@ -74,6 +74,35 @@
</LinearLayout>
<LinearLayout
android:id="@+id/subtitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/selector_item"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_player_subtitle"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/subtitleText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="16" />
</LinearLayout>
<LinearLayout
android:id="@+id/http"
android:layout_width="match_parent"

@ -0,0 +1,59 @@
<?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"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:padding="16dp">
<com.google.android.material.slider.Slider
android:id="@+id/slider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:nextFocusDown="@id/positive"
android:stepSize="1"
android:valueFrom="16"
android:valueTo="60"
app:thumbColor="@color/blue_500"
app:trackColorActive="@color/blue_500"
app:trackColorInactive="@color/blue_50" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:orientation="horizontal">
<TextView
android:id="@+id/positive"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_weight="1"
android:background="@drawable/selector_text"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:singleLine="true"
android:text="@string/dialog_positive"
android:textColor="@color/white"
android:textSize="14sp" />
<TextView
android:id="@+id/negative"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/selector_text"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:singleLine="true"
android:text="@string/dialog_negative"
android:textColor="@color/white"
android:textSize="14sp" />
</LinearLayout>
</LinearLayout>

@ -174,6 +174,14 @@ public class Setting {
Prefers.put("ua", ua);
}
public static int getSubtitle() {
return Prefers.getInt("subtitle", 16);
}
public static void putSubtitle(int subtitle) {
Prefers.put("subtitle", subtitle);
}
public static boolean isTunnel() {
return Prefers.getBoolean("exo_tunnel");
}

@ -0,0 +1,6 @@
package com.fongmi.android.tv.impl;
public interface SubtitleCallback {
void setSubtitle(int size);
}

@ -68,6 +68,7 @@
<string name="setting_player_ua">User-Agent</string>
<string name="setting_player_http">连线方式</string>
<string name="setting_player_tunnel">隧道模式</string>
<string name="setting_player_subtitle">字幕大小</string>
<string name="setting_player_flag">线路播放</string>
<string name="setting_decode">解码方式</string>
<string name="setting_render">渲染方式</string>

@ -68,6 +68,7 @@
<string name="setting_player_ua">User-Agent</string>
<string name="setting_player_http">連線方式</string>
<string name="setting_player_tunnel">隧道模式</string>
<string name="setting_player_subtitle">字幕大小</string>
<string name="setting_player_flag">線路播放</string>
<string name="setting_decode">解碼方式</string>
<string name="setting_render">渲染方式</string>

@ -68,6 +68,7 @@
<string name="setting_player_ua">User-Agent</string>
<string name="setting_player_http">HTTP method</string>
<string name="setting_player_tunnel">Tunnel mode</string>
<string name="setting_player_subtitle">Subtitle size</string>
<string name="setting_player_flag">Flag play</string>
<string name="setting_decode">Decode</string>
<string name="setting_render">Render</string>

@ -13,4 +13,6 @@ android {
dependencies {
implementation 'androidx.annotation:annotation:' + annotationVersion
implementation project(':media-lib-common')
implementation project(':media-lib-ui')
}

@ -16,6 +16,7 @@ import android.widget.MediaController;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.media3.ui.SubtitleView;
import java.util.List;
import java.util.Map;
@ -228,7 +229,7 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl
private void reset() {
removeRenderView();
mSubtitleView.setText("");
mSubtitleView.setCues(null);
mTargetState = STATE_IDLE;
mCurrentState = STATE_IDLE;
mCurrentBufferPosition = 0;
@ -365,7 +366,7 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl
ITrackInfo trackInfo = trackInfos.get(index);
if (trackInfo.getTrackType() != type) continue;
if (index == track && selected != track) {
mSubtitleView.setText("");
mSubtitleView.setCues(null);
mPlayer.selectTrack(index);
updateForCurrentTrackSelections();
if (text && position > 0) seekTo(position);
@ -380,7 +381,7 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl
ITrackInfo trackInfo = trackInfos.get(index);
if (trackInfo.getTrackType() != type) continue;
if (index == track && selected == track) {
mSubtitleView.setText("");
mSubtitleView.setCues(null);
mPlayer.deselectTrack(track);
updateForCurrentTrackSelections();
}
@ -511,7 +512,7 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl
@Override
public void onTimedText(IMediaPlayer mp, IjkTimedText text) {
mSubtitleView.onSubtitleChanged(text.getText());
mSubtitleView.setCues(SubtitleParser.parse(text.getText()));
}
@Override

@ -1,62 +0,0 @@
package tv.danmaku.ijk.media.player.ui;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.text.Html;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.widget.TextView;
import androidx.annotation.Nullable;
public class SubtitleView extends TextView {
private final float strokeWidth;
private boolean isDrawing;
public SubtitleView(Context context) {
this(context, null);
}
public SubtitleView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public SubtitleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
strokeWidth = Util.dp2px(getContext(), 0.8f);
}
public void onSubtitleChanged(String text) {
if (TextUtils.isEmpty(text)) {
setText("");
} else {
setText(Html.fromHtml(text.replaceAll("\r\n", "<br>").replaceAll("\r", "<br>").replaceAll("\n", "<br>").replaceAll("\\{\\\\.*?\\}", "")));
}
}
@Override
public void invalidate() {
if (isDrawing) return;
super.invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
isDrawing = true;
Paint paint = getPaint();
paint.setStyle(Paint.Style.FILL);
setTextColor(Color.WHITE);
super.onDraw(canvas);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeWidth(strokeWidth);
setTextColor(Color.BLACK);
super.onDraw(canvas);
paint.setStyle(Paint.Style.FILL);
setTextColor(Color.WHITE);
isDrawing = false;
}
}

@ -2,12 +2,17 @@ package tv.danmaku.ijk.media.player.ui;
import android.content.Context;
import android.util.DisplayMetrics;
import android.util.TypedValue;
public class Util {
public static final String USER_AGENT = "User-Agent";
public static float dp2px(Context context, float dpValue) {
return (dpValue * context.getResources().getDisplayMetrics().densityDpi) / DisplayMetrics.DENSITY_DEFAULT;
public static float dp2px(Context context, float dp) {
return (dp * context.getResources().getDisplayMetrics().densityDpi) / DisplayMetrics.DENSITY_DEFAULT;
}
public static float sp2px(Context context, float sp) {
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, context.getResources().getDisplayMetrics());
}
}

@ -15,14 +15,11 @@
android:scaleType="fitCenter"
android:visibility="gone" />
<tv.danmaku.ijk.media.player.ui.SubtitleView
android:id="@+id/ijk_subtitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_margin="16dp"
android:gravity="center"
android:textStyle="bold" />
</FrameLayout>
<androidx.media3.ui.SubtitleView
android:id="@+id/ijk_subtitle"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</merge>

Loading…
Cancel
Save